sql - 如何将文本转换为在sql中作为日期输入的日期?
问题描述
数据类型为 TEXT 并输入为“20/11/2017”,当使用 MAX 或 MIN 时,它会忽略月份。我正在尝试将其转换为月份的日期格式以供考虑。
CAST AND CONVERT 似乎不起作用,因为以下错误返回
消息 241,级别 16,状态 1,第 13 行
从字符串转换日期和/或时间时转换失败。
代码:
SELECT
user_id,
record_id
--CAST(onSale AS date) AS onSale
--CONVERT(DATE, onSale) AS onSale,
--CONVERT(DATE, OffSale) AS OffSale
FROM (SELECT user_id,
record_id,
(SELECT MAX(value) AS Expr1
FROM UPLOADS.LINES AS SUH WITH (NoLock, ReadUncommitted)
WHERE (field_id = 4782) AND (record_id = UR.record_id)) AS onSale,
(SELECT MAX(value) AS Expr1
FROM UPLOADS.LINES AS SUH WITH (NoLock, ReadUncommitted)
WHERE (field_id = 4783) AND (record_id = UR.record_id)) AS OffSale
FROM UPLOADS.RECORDS AS UR WITH (NoLock, ReadUncommitted)
WHERE (module_id = 18)) AS DATA;
最终结果基本上是 MAX 或 MIN 日期,所有三个组件都是日期、月份和年份。因此,如果用户输入了两个日期,即 17/05/2018 和 17/04/2018,那么如果使用 MAX,则应显示第一个日期。
解决方案
使用 CONVERT 时可以使用格式代码,甚至可以使用 TRY_CONVERT 来防止无效日期导致的错误。我还改进了您的代码,使其更简单、更高效。
SELECT [user_id],
record_id,
MAX(CASE WHEN SUH.field_id = 4782 THEN TRY_CONVERT( DATE, SUH.value, 103) END) AS onSale,
MAX(CASE WHEN SUH.field_id = 4783 THEN TRY_CONVERT( DATE, SUH.value, 103) END) AS OffSale
FROM UPLOADS.RECORDS AS UR
JOIN UPLOADS.LINES AS SUH ON SUH.record_id = UR.record_id
WHERE module_id = 18
GROUP BY [user_id],
record_id;
推荐阅读
- python - 如何使用 Python 将日期时间插入 sqlite3 数据库?
- go - 根据 map[string]somestruct 调用 golang 调度方法
- html - 为什么我不能在我的 html 中删除奇怪的灰线
- python-3.x - 如何在 Numpy/MatplotLib 中可视化线性规划(具有任意不等式)的可行区域?
- android - 方法 toList() 没有发出任何东西
- c# - .NETCore 从 2.2.0 到 2.2.3
- laravel - 如何在 laravel 护照中创建登录 api 而无需注册 api 但创建令牌并将其存储在数据库中应该存在于登录 api 中
- microservices - 需要防御带有 CosmosDB 的事件溯源架构的古怪挑战
- reactjs - 在 AWS ampify 中部署时,页面在提交后重定向到 index.html
- javascript - 如何在javascript中创建转换构造函数?