【发布时间】:2019-06-20 13:34:08
【问题描述】:
数据类型为 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,则应显示第一个日期。
【问题讨论】:
-
你需要设置 DATEFORMAT dmy;在运行查询之前。这应该会说服 SQL Server 使用 uk 日期格式,从而让 CAST 或 CONVERT 起作用
-
ntext、text和image数据类型将在 SQL Server 的未来版本中删除。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。请改用nvarchar(max)、varchar(max)和varbinary(max)。 See details here。并存储 DATE - 你应该 REALLY 使用DATE或DATETIME2(n)- 不是任何基于字符串的数据类型!!
标签: sql sql-server reporting-services type-conversion