Преобразование строки в дату в DB2 - PullRequest
7 голосов
/ 31 января 2011

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

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

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

CONVERT(datetime,SETTLEMENTDATE.VALUE,103)

Для фона я дошел до

CAST(SETTLEMENTDATE.VALUE, DATE)

И

DATE(SETTLEMENTDATE.VALUE)

Но мне нужны экспертные знания вундеркинда DB2!1016 *

Спасибо

Ответы [ 5 ]

18 голосов
/ 31 января 2011

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

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

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

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

Практически в любой последней версии DB2 для Linux / UNIX / Windows (8.2 или новее, возможно, даже в более старых версиях) вы можете сделать это, используя функцию TRANSLATE:

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'))

Это требует, чтобы ваши данные соответствовали форматирующей строке; это легче понять, глядя на него, но не так гибко, как опция ПЕРЕВОД.

6 голосов
/ 10 июня 2016

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

Например:

Dt
20151104

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

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

Кроме того, Если вы хотите выполнить запрос от связанного сервера MS SQL к 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

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

0 голосов
/ 17 марта 2018

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

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

, затем вы можете адаптировать форматировать с элементами, которые можно найти здесь

0 голосов
/ 09 января 2015

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

select VARCHAR_FORMAT(creationdate, 'MM/DD/YYYY') from table name
0 голосов
/ 31 января 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...