Преобразование строки в дату в DB2

Я впервые работаю с базой данных DB2.

Я пытаюсь работать с датами в DB2, но данные хранятся в виде строки в базе данных DB2.

Я хочу преобразовать эту строку даты в фактическую дату, предпочтительно отбрасывая время, потому что я хочу, чтобы все транзакции между 1 янв 2011 и 26 янв 2011.

поэтому, по сути, я хочу, чтобы этот оператор MS SQL в DB2 magic...

CONVERT(datetime,SETTLEMENTDATE.VALUE,103)

для фона, я получил, как далеко as

CAST(SETTLEMENTDATE.VALUE, DATE)

и

DATE(SETTLEMENTDATE.VALUE)

но мне нужны экспертные знания DB2 whizzkid!

спасибо

5 ответов


основываясь на вашем собственном ответе, я предполагаю, что ваш столбец имеет данные, отформатированные следующим образом:

'DD/MM/YYYY HH:MI:SS'

фактические разделители между днем / месяцем / годом не имеют значения, и ничего не происходит после года.

вы не говорите, какую версию DB2 вы используете или на какой платформе она работает, поэтому я предполагаю, что она находится в Linux, UNIX или Windows.

почти любая последняя версия DB2 для Linux / UNIX /Windows (8.2 или более поздней версии, возможно, даже старше версии), вы можете сделать это с помощью :

select 
   date(translate('GHIJ-DE-AB',column_with_date,'ABCDEFGHIJ'))
from
   yourtable

С этим решением не имеет значения, что происходит после даты в вашей колонке.

в DB2 9.7, вы также можете использовать TO_DATE функция (аналогичная To_date Oracle):

date(to_date(column_with_date,'DD-MM-YYYY HH:MI:SS'))

это требует, чтобы ваши данные соответствовали строке форматирования; это легче понять, глядя на него, но не так гибко, как опция TRANSLATE.


Я знаю, это старый пост, но все же я хочу внести свой вклад
Выше не будет работать, если у вас есть формат данных, как это
'YYYMMDD'

Например:

Dt
20151104

поэтому я попытался следовать, чтобы получить желаемый результат.

select cast(Left('20151104', 4)||'-'||substring('20151104',5,2)||'-'||substring('20151104', 7,2) as date) from SYSIBM.SYSDUMMY1;

дополнительно, Если вы хотите запустить запрос из MS SQL linked server в DB2 (для отображения только 100 строк).

    SELECT top 100 * from OPENQUERY([Linked_Server_Name],
    'select cast(Left(''20151104'', 4)||''-''||substring(''20151104'',5,2)||''-''||substring(''20151104'', 7,2) as date) AS Dt 
    FROM SYSIBM.SYSDUMMY1')

Результат после вышеуказанного запроса:

Dt
2015-11-04

надеюсь, это поможет другие.


хорошо, кажется, немного взломать. Я заставил его работать с подстрокой, так что в функцию DATE передается только часть строки с датой (а не время)...

DATE(substr(SETTLEMENTDATE.VALUE,7,4)||'-'|| substr(SETTLEMENTDATE.VALUE,4,2)||'-'|| substr(SETTLEMENTDATE.VALUE,1,2))

Я все равно Приму любые ответы, которые лучше, чем этот!


в функции формата вы можете использовать функцию timestamp_format. Например, если формат YYYYMMDD, вы можете сделать это:

select TIMESTAMP_FORMAT(yourcolumnchar, 'YYYYMMDD') as YouTimeStamp 
from yourtable

затем вы можете адаптировать формат с элементами format foundable здесь


вы можете использовать:

select VARCHAR_FORMAT(creationdate, 'MM/DD/YYYY') from table name