检查列中的值是否为日期,然后对其执行某些操作

时间:2013-11-12 18:54:44

标签: sql-server tsql ssms

我有一个列,其中包含拒绝某个人的原因。 该值可能是“拒绝人员”或“10/18/2012”

我正在尝试设置查询以检查该值是否为日期,然后它可以在其位置放置一个空格。否则,请保留其中的文本。

我设置的查询是:

SELECT DISTINCT person_id, 
CASE description
  WHEN ISDATE(description) THEN ''
END AS refuseReason
    FROM person

但这会返回错误。如果日期本身保存为VARCHAR,那么我是否必须先将它们转换为日期,然后检查是否ISDATE?如果我这样做了,是否会在文本转换时转换文本?

编辑:我通过将它投射到日期时间来尝试它,并且我也一直收到错误:

SELECT DISTINCT person_id, 
CASE description
  WHEN ISDATE(CAST(OBSVALUE AS DATETIME)) THEN ''
END AS refuseReason
    FROM person

2 个答案:

答案 0 :(得分:2)

(假设TSQL)IsDate()返回1或0.(另外你的CASE语法不正确)

尝试:

SELECT DISTINCT person_id, 
CASE 
  WHEN ISDATE(description) = 1 THEN ''
  ELSE description
END AS refuseReason
    FROM person

答案 1 :(得分:0)

ISDATE()函数返回布尔值1或0 你必须使用

制作该条款
WHEN ISDATE(@variable) = 1 THEN ''
ELSE @variable