#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