Sql WHERE条款,其中价值是可转换的
在Sql WHERE条款,其中价值是可转换的,sql,sql-server,tsql,date,type-conversion,Sql,Sql Server,Tsql,Date,Type Conversion,在SQL Server中是否有一种方法可以使用T-SQL来表示: WHERE CONVERT(date, mat1_04_05, 101) = true 我正在对一个没有源代码的应用程序做一些报告,该列是varchar,我不能依赖用户数据 编辑 我尝试使用ISDATE。但是,我仍然遇到转换错误这是完整的查询: SELECT mat1_04_01 AS 'CaseStg', matter.mat_no
SQL Server
中是否有一种方法可以使用T-SQL
来表示:
WHERE CONVERT(date, mat1_04_05, 101) = true
我正在对一个没有源代码的应用程序做一些报告,该列是varchar
,我不能依赖用户数据
编辑
我尝试使用ISDATE
。但是,我仍然遇到转换错误这是完整的查询:
SELECT mat1_04_01 AS 'CaseStg',
matter.mat_no AS 'MatNo',
MAX(matter.client) AS 'Client',
MAX(mat1_03_01) AS 'InCo',
MAX(mat1_07_01) AS 'Clm Amt',
MAX(mat1_07_03) AS 'Clm Bal',
MAX(mat1_04_05) AS 'BilSnt',
MAX(mat1_01_07) AS 'Injured',
CONVERT(CHAR, MIN(CONVERT(DATE, usr1_02_01))) AS dos_start,
CONVERT(CHAR, MAX(CONVERT(DATE, usr1_02_02))) AS dos_end
FROM lntmuser.matter
INNER JOIN lntmuser.usertype1
ON lntmuser.matter.sysid = lntmuser.usertype1.mat_id
WHERE Isdate(mat1_04_05) = 1
AND Datediff(DAY, CONVERT(DATE, mat1_04_05, 101), Getdate()) > 31
AND mat1_04_01 LIKE 'BILLING MAILED OUT'
AND matter.status NOT LIKE 'CLOSED'
GROUP BY mat1_04_01,
matter.mat_no
你的意思是检查该列是否为日期
WHERE ISDATE(matl_04_05) = 1
你的意思是检查该列是否为日期
WHERE ISDATE(matl_04_05) = 1
你是说像这样的东西吗
SELECT * FROM FOO where ISDATE(mat1_04_05)
你是说像这样的东西吗
SELECT * FROM FOO where ISDATE(mat1_04_05)
使用
使用
对于
datetime
您可以
;with T(F) as (
select 'cake' union
select '01 mar 2011'
)
select cast(f as datetime) from T where isdate(F) = 1
>>F
>>2011-03-01 00:00:00.000
对于
datetime
您可以
;with T(F) as (
select 'cake' union
select '01 mar 2011'
)
select cast(f as datetime) from T where isdate(F) = 1
>>F
>>2011-03-01 00:00:00.000
假设我理解你最初的问题
IF ISDATE('2009-05-12 10:19:41.177') = 1
PRINT 'VALID'
ELSE
PRINT 'INVALID'
来源:假设我理解了你最初的问题
IF ISDATE('2009-05-12 10:19:41.177') = 1
PRINT 'VALID'
ELSE
PRINT 'INVALID'
来源:Dude——在没有控制结构的WHERE中的同一日期字段上使用ISDATE()
和CONVERT()
是没有意义的。也就是说,如果ISDATE()
=false,那么CONVERT()
保证会给您一个转换错误
试试这个:
WHERE
...
CASE WHEN ISDATE(myDateField) = 1 THEN DATEDIFF(CONVERT(...)) ELSE 0 END > 31
Dude——在没有控件结构的WHERE中的同一日期字段上使用ISDATE()
和CONVERT()
是没有意义的。也就是说,如果ISDATE()
=false,那么CONVERT()
保证会给您一个转换错误
试试这个:
WHERE
...
CASE WHEN ISDATE(myDateField) = 1 THEN DATEDIFF(CONVERT(...)) ELSE 0 END > 31
你说的“真”是什么意思?你是在检查它是否以某种格式存在,还是在检查它是否存在?我正在尝试运行一个报告,忽略/找到阻止fluck up的数据条目,而开发者没有处理lol。@Adrain谢谢你,我只是在试图纠正这个错误--使用ISDATE()和CONVERT()是没有意义的在没有控制结构的同一日期字段上…请参见下面我的答案。您所说的“真”是什么意思?你是在检查它是否以某种格式存在,还是在检查它是否存在?我正在尝试运行一个报告,忽略/找到阻止fluck up的数据条目,而开发者没有处理lol。@Adrain谢谢你,我只是在试图纠正这个错误--使用ISDATE()和CONVERT()是没有意义的在没有控制结构的同一日期字段上…请参见下面的答案。