Конвертация не удалась при конвертации даты из символьной строки - PullRequest
1 голос
/ 04 июня 2019

Я пытаюсь изменить поле даты счета-фактуры ГГГММДД в ​​краткий формат даты ДД / ММ / ГГГГ или ДД-ММ-ГГГГ в Великобритании / Великобритании в выражении SELECT.

Выполнение на сервере MSSQL 2008 R2

SQL

CONVERT(date,CAST(columnvalue AS VARCHAR),103)

Производит ГГГГ-ММ-ДД

CAST(right(convert(varchar,columnvalue),2)+substring(convert(VARCHAR,columnvalue ),5,2) + left(convert(VARCHAR,columnvalue ),4)AS VARCHAR)

ПроизводитДДММГГГ

CONVERT(date,CAST(right(convert(varchar,columnvalue),2)+substring(convert(VARCHAR,columnvalue),5,2) + left(convert(VARCHAR,columnvalue),4)AS VARCHAR),103) 

ОШИБКА

"Ошибка преобразования при преобразовании даты и / или времени из строки символов"

Чтоя делаю не так?

Ответы [ 2 ]

1 голос
/ 04 июня 2019

Будет полезно следующее:

SELECT CONVERT(VARCHAR(10), GETDATE(), 103) AS [DD/MM/YYYY]

SELECT CONVERT(VARCHAR(10), GETDATE(), 105) AS [DD-MM-YYYY]
0 голосов
/ 05 июня 2019

В зависимости от типа данных столбца, который вы пытаетесь преобразовать, существуют разные способы решения этой проблемы.

Предполагая, что столбец уже является одним из типов дат (date / datetime / datetime2), преобразование выполняется просто - все, что вам нужно, это выбрать правильный параметр style.

Для британского / французского (dd/mm/yyyy) вы используете 103:

SELECT CONVERT(char(10), dateOrdateTimeValue, 103)

Если исходный столбец является строковым столбцом (char / varchar / nchar / nvarchar), а формат представления даты в строке - yyyymmdd, вы можете безопасно привести его к дате, так как yyyymmdd всегда будет правильно интерпретироваться SQL Server, а затем использовать convert, как и раньше:

SELECT CONVERT(char(10), CAST(stringRepresentationOfDateAsYYYYMMDD As Date), 103)

Примечание: только форматы ISO8601 (ггггммдд | гггг-мм-дд) гарантированно правильно интерпретируются независимо от настроек культуры для типа данных даты (Bewrae: В типе данных DateTime есть ошибка со вторым формат ).

Если исходным столбцом является int, сначала вы приводите к char, затем к date и, наконец, используете convert:

SELECT CONVERT(char(10), CAST(CAST intRepresentationOfDateAsYYYYMMDD as char(8)) As Date), 103)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...