Найти записи с определенным форматом даты - PullRequest
0 голосов
/ 15 октября 2019
  1. Я хочу выбрать все записи, которые не в формате гггг-мм-дд. Тип данных столбца: varchar.
  2. Обновите записи на шаге 1 в правильном формате (гггг-мм-дд).

Я попытался выполнить фильтрацию с помощью функции: IsDate() но безуспешно.

Создать таблицу

CREATE TABLE #tempdate (dateCol varchar(50));

INSERT INTO #tempdate VALUES 
('2019-05-13 16:55:47:284'),
('2019-04-05 14:08:10.060'),
('6/19/2018 12:35:53 PM'),
('2019-05-13');

Ответы [ 5 ]

1 голос
/ 15 октября 2019

Использование try_cast()

select try_cast(datecol as date)
0 голосов
/ 15 октября 2019

Пожалуйста, попробуйте ниже.

update #tempdate set datecol=Convert(char(10),convert(datetime,datecol,120),126)

Пожалуйста, дайте мне знать

Спасибо

0 голосов
/ 15 октября 2019

Наиболее важный ответ был дан EzLo в комментарии выше: не храните значения даты / времени в строковом формате.

Собственный тип даты / времени хранится в нечитаемом двоичном шаблоне,Любое действие будет быстрее и безопаснее от зависимости от культуры.

Читаемый формат предназначен только для вывода и должен выполняться в экспорте или на уровне презентации.

Если вам нужно придерживатьсяэто (или если это ваша попытка очистить и преобразовать ваши данные в правильный формат), я бы предложил один из них:

SELECT *
FROM #tempdate 

- либо используйте текстовый базовый шаблон

WHERE LEFT(dateCol,10) NOT LIKE '[1,2][0-9][0-9][0-9]-[0,1][0-9]-[0-3][0-9]';

- или использовать фиксированный формат преобразования (здесь я использую 126 для ISO8601)

WHERE TRY_CONVERT(date,dateCol,126) IS NULL
0 голосов
/ 15 октября 2019

1.

SELECT * FROM #tempdate 
WHERE ISDATE(dateCol)= 1 AND CHARINDEX('-',dateCol) = 5

2.

UPDATE #tempdate
SET datecol = CONVERT(DATETIME,datecol,102)
WHERE ISDATE(dateCol)= 1 

SELECT * FROM #tempdate
0 голосов
/ 15 октября 2019

Вы можете попробовать ниже -

update #tempdate set datecol=format(cast(dateCol as date),'yyyy-mm-dd')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...