将 varchar 转换为 datetime 以对日期进行排序?
Posted
技术标签:
【中文标题】将 varchar 转换为 datetime 以对日期进行排序?【英文标题】:Convert varchar to datetime to sort date? 【发布时间】:2019-07-05 02:42:03 【问题描述】:我想尝试对日期进行排序,但有一些限制,因为这些列是 varchar。
现有数据
这是我测试的查询。
SELECT PERIODE, RF, APPROVE_DATE
FROM DLY_UPGRADE
WHERE (SLP = '368') AND (CONVERT(datetime, APPROVE_DATE, 101) > '01/01/2017')
错误信息:
【问题讨论】:
你为什么首先使用 varchar 来存储日期? 【参考方案1】:如果您使用的是 SQL Server,请尝试以下操作:
SELECT PERIODE, RF, APPROVE_DATE
FROM DLY_UPGRADE
WHERE (SLP = '368') AND (CONVERT(date, APPROVE_DATE, 103) > '2017-01-01')
【讨论】:
【参考方案2】:使用
DATE_FORMAT(STR_TO_DATE(`APPROVE_DATE`, '%d/%m/%Y'), '%Y-%m-%d')
从字符串中更改日期,然后与Y-m-d
格式进行比较
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')
【讨论】:
感谢您对类似案例的帮助。 :)【参考方案3】: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 也是如此。
【讨论】:
【参考方案4】:您的转换问题似乎出现在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)
【讨论】:
谢谢我的问题已经解决了。我只需要用01-01-2017调整日期格式101代码以上是关于将 varchar 转换为 datetime 以对日期进行排序?的主要内容,如果未能解决你的问题,请参考以下文章
将 varchar 数据类型转换为 datetime 数据类型导致值超出范围的问题