Конвертировать varchar в дату - SQL - PullRequest
0 голосов
/ 04 октября 2019

У меня есть столбец date значений, которые в настоящее время имеют тип varchar. Может кто-нибудь объяснить, пожалуйста, самый простой способ преобразовать их в фактические даты. Ниже приведен список примеров значений в вышеупомянутом столбце

 - Expiration Date 
 - 00/00/00
 - 11/06/10  
 - 00/00/00  
 - 29/02/08  
 - 01/04/11

ПРИМЕЧАНИЕ: 00/00/00 означает, что нет срока годности, но их все равно необходимо как-то включить, так как я храню в них другие данные.

Ответы [ 4 ]

3 голосов
/ 04 октября 2019

Ваши данные отображаются в формате дд / мм / гг, поэтому используйте convert() с кодом формата 3:

select try_convert(date, str, 3)
0 голосов
/ 04 октября 2019

В этом случае необходимо выбрать из преобразованных результатов:

declare @myTable table(ExpirationDate  varchar(max)) 

insert into @myTable (ExpirationDate ) values ('00/00/00')
insert into @myTable (ExpirationDate) values ('11/06/10')
insert into @myTable (ExpirationDate) values ('29/02/08')
insert into @myTable (ExpirationDate) values ('01/04/11')

 select ExpirationDate from
 (
    select ISNULL(try_convert(date, ExpirationDate, 3), '9999-12-31') as ExpirationDate 
    from @myTable) d
 order by d.ExpirationDate asc

Результаты:

ExpirationDate
2008-02-29
2010-06-11
2011-04-01
9999-12-31
0 голосов
/ 04 октября 2019

Попробуйте это:

select case yourVarcharValue when '00/00/00' then NULL else Try_Convert(Date, yourVarcharValue)
0 голосов
/ 04 октября 2019

Я настоятельно рекомендую вам не хранить поля даты как NVARCHAR / VARCHAR:

select ISNULL(try_convert(date, ExpirationDate, 3), '9999-12-31') from myTable

SQL Fiddle

Настройка схемы MS SQL Server 2017 :

create table myTable (ExpirationDate  varchar(max))
insert into myTable (ExpirationDate ) values ('00/00/00')
insert into myTable (ExpirationDate) values ('11/06/10')
insert into myTable (ExpirationDate) values ('29/02/08')
insert into myTable (ExpirationDate) values ('01/04/11')

Запрос 1 :

select ISNULL(try_convert(date, ExpirationDate, 3), '9999-12-31') from myTable

Результаты :

|            |
|------------|
| 9999-12-31 |
| 2010-06-11 |
| 2008-02-29 |
| 2011-04-01 |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...