Как преобразовать ДД / ММ / ГГГГ в VARCHAR (Макс) в ГГГГММД в SQL Server - PullRequest
0 голосов
/ 12 мая 2019

Даты в формате DD/mm/yyyy, хранящиеся в столбце varchar(max), необходимо преобразовать в формат yyyymmdd.

Перечисленные ниже параметры преобразования / преобразования не поддерживаются.

CONVERT(VARCHAR(19), CONVERT(DATETIME, wfm.date, 3), 112) 

CONVERT(VARCHAR(50), CAST(wfm.date AS DATETIME2), 112) 

CAST(CAST(wfm.date AS DATETIME2(15)) AS DATETIME)

Я получаю сообщение об ошибке для синтаксиса CONVERT:

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

Для CASTсинтаксис, я получаю эту ошибку:

Строка 1: указанная шкала 15 недопустима.'дд / мм / гггг / в varchar для преобразования в формат ггггммдд

Ответы [ 5 ]

2 голосов
/ 12 мая 2019

В идеале, не храните даты как varchar, сохраняйте их как date и не беспокойтесь о формате, в котором они отображаются в вашем уровне представления. Поэтому вы должны просто сделать:

SELECT TRY_CONVERT(date,YourVarcharMAXDate,103);

Если вы должны получить формат yyyyMM`` (i don't recommend, change your data type of your column to дата ), then you can use a furterh CONVERT`:

SELECT CONVERT(varchar(8),TRY_CONVERT(date,YourVarcharMAXDate,103),112);

Если механизм обработки данных не может преобразовать дату из-за того, что она является недопустимым форматом, TRY_CONVERT вернет NULL; вам нужно исправить эти значения (сделать их действительными). Еще одна веская причина, почему бы не использовать varchar для хранения даты.

1 голос
/ 12 мая 2019

Может быть, это помогает

   DECLARE @dt DATETIME= '2019-12-31 14:43:35.863';
    SELECT CONVERT(VARCHAR(10), @dt, 11) s1, 
        CONVERT(VARCHAR(10), @dt, 111) s2;
0 голосов
/ 12 мая 2019
select convert(varchar, convert(datetime, wfm.date, 103), 112)
0 голосов
/ 12 мая 2019

Если вы используете SQL Server 2016 или новее, вы можете использовать PARSE и FORMAT, чтобы сделать это довольно легко:

SELECT
    FORMAT(PARSE(wfm.Date AS DATE USING 'de-DE'), 'yyyyMMdd')
FROM
    dbo.WhateverYourTableNameIS

Формат dd/mm/yyyy - это используемый формат, например поэтому в Германии я использую культуру de-DE для преобразования этой строки в DATE. Затем вы можете отформатировать его, используя обычные строки форматирования, как в C # /. NET.

0 голосов
/ 12 мая 2019

Вы всегда можете просто использовать substring для этого.Пример показан ниже.

DECLARE  @samples TABLE
(
    Dates NVARCHAR(50)
)

INSERT INTO @samples VALUES 
('10/11/2018'),
('12/11/2018'),
('15/11/2018'),
('17/11/2018'),
('19/11/2018'),
('20/11/2018')

SELECT 
        SUBSTRING(Dates, 7,4) + 
        SUBSTRING(Dates, 4,2) + 
        SUBSTRING(Dates, 1,2) as [NewDate]

FROM @samples

Вывод будет списком строк с требуемым форматом.Это не подходит для вас, но вы всегда можете попытаться преобразовать их в дату, используя CAST, и она должна правильно привести yyyyMMdd к дате, если дата верна.

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