Таблицы MS SQL — DB2

#sql

#sql

Вопрос:

Я преобразовал даты DB2 в SQL из числовой строки yyyymmdd, используя substr, чтобы получить mm / dd / гггг, который является желаемым форматом. Проблема по-прежнему не распознается как «истинная» дата для выполнения вычислений, таких как datedif.

Как мне изменить новый формат мм / дд / гггг на поле истинной даты? Я сделал это более сложным, чем должно быть?

Комментарии:

1. date столбцы не имеют » формата «. Любой формат, который вы видите, применяется инструментом SQL, который вы используете для запроса данных.

2. Найдите приведение и преобразуйте. Это одна из таких функций.

3. я думаю, что это должно быть похоже на гггг-мм-дд, тогда это будет работать в MS Sql Server

Ответ №1:

Попробуйте это….

 select convert(datetime,yyyymmdd )
  

или

 select Cast(yyyymmdd as datetime)
  

Комментарии:

1. Хммм, значит, я не должен манипулировать исходной числовой строкой, которая равна 20140601, с помощью моей подпрограммы substr, я должен просто попробовать функцию convert или cast с самого начала?

2. Не могли бы вы немного уточнить свой ответ?

Ответ №2:

чтобы преобразовать строку мм / дд / гггг в истинную дату, используйте:

 convert(datetime, your_nonDB2_date_string_here ,101)
  

Еще…

«Я сделал это более сложным, чем должно быть?» Да. Не храните даты в виде строк, это действительно так просто.

Я должен предположить, что «SQL» в вашем вопросе означает Microsoft SQL Server (MS не владеет «SQL», о котором я знаю). Итак, если вы получаете строки из DB2 в формате YYYYMMDD, это, оказывается, самый безопасный формат для преобразования в «реальные даты» в SQL Server.

Итак, при чтении в разделенную таблицу SQL сделайте это: (112 — это «стиль» для YYYYMMDD)

 convert(datetime, your_DB2_date_string_here ,112)
  

там, где вы видите примечание «datetime» выше, вы можете использовать разные типы в SQL Server:

 date --<< date only (no time)
smalldatetime
datetime
datetime2 --<< highest precision
  

Для ВЫВОДА «реального поля даты» вы можете снова использовать функцию convert, или, если у вас SQL 2012 или более поздняя версия, вы можете использовать функцию format()

для вывода в формате ММ / ДД/ГГГГ используйте

 convert(varchar,real_date_field,101)

format(real_date_field,'MM/dd/yyyy') --<< nb case sensitive: MM not mm
  

смотрите:
http://msdn.microsoft.com/en-us/library/ms187928 (v=sql.100).aspx
http://www.sql-server-helper.com/sql-server-2012/format-function-vs-convert-function.aspx