[英]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
在这里,您可以将varchar
为datetime
并使用它来按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.