繁体   English   中英

将varchar转换为datetime以排序日期?

[英]Convert varchar to datetime to sort date?

我想尝试对日期进行排序,但是有一些限制,因为这些列是varchar。

现有数据

在此处输入图片说明

这是我测试的查询。

SELECT        PERIODE, RF, APPROVE_DATE
FROM            DLY_UPGRADE
WHERE        (SLP = '368') AND (CONVERT(datetime, APPROVE_DATE, 101) > '01/01/2017')

错误消息:

在此处输入图片说明

采用

 DATE_FORMAT(STR_TO_DATE(`APPROVE_DATE`, '%d/%m/%Y'), '%Y-%m-%d')

要从字符串更改日期,然后与Ymd格式进行比较

 SELECT        PERIODE, RF, APPROVE_DATE
 FROM            DLY_UPGRADE
 WHERE        (SLP = '368') AND (DATE_FORMAT(STR_TO_DATE(`APPROVE_DATE`, '%d/%m/%Y'), '%Y-%m-%d')) > '2017-01-01')

如果使用的是SQL Server,请尝试以下操作:

SELECT        PERIODE, RF, APPROVE_DATE
FROM            DLY_UPGRADE
WHERE        (SLP = '368') AND (CONVERT(date, APPROVE_DATE, 103) > '2017-01-01')
SELECT        PERIODE, RF, APPROVE_DATE, cast(PERIODE as datetime) as PERIODEDatetime
FROM            DLY_UPGRADE
WHERE        (SLP = '368') AND (CONVERT(datetime, APPROVE_DATE, 101) > '01/01/2017')
order by PERIODEDatetime asc

在这里,您可以将varchardatetime并使用它来按asc / desc顺序进行排序。 APPROVE_DATE也是一样。

您的转换问题似乎WHERE子句中。 但是,在继续查询之前,我将使用TRY_CONVERT()测试:

select approve_date
from dly_upgrade
where slp = '368' and approve_date is not null and
      try_convert(date, approve_date, 103) is null;

样式101为MM / DD / YYYY,因此“ '15/11/2016'将失败,因为15不是有效的月份。 103是DD / MM / YYYY,这似乎是您想要的。

假设此列中未返回任何意外值,我建议:

SELECT PERIODE, RF, APPROVE_DATE
FROM  DLY_UPGRADE
WHERE SLP = '368' AND
      TRY_CONVERT(datetime, APPROVE_DATE, 103) > '2017-01-01'
ORDER BY ?  -- not sure if you want PERIOD or TRY_CONVERT(datetime, APPROVE_DATE, 103)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM