1

我有一列包含一个人被拒绝的原因。该值可能是“拒绝的人”或“2012 年 10 月 18 日”

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

我设置的查询是:

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
4

2 回答 2

3

(假设 TSQL)IsDate()返回 1 或 0。(您的 CASE 语法也不正确)

尝试:

SELECT DISTINCT person_id, 
CASE 
  WHEN ISDATE(description) = 1 THEN ''
  ELSE description
END AS refuseReason
    FROM person
于 2013-11-12T18:59:47.110 回答
0

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

WHEN ISDATE(@variable) = 1 THEN ''
ELSE @variable
于 2013-11-12T18:57:46.753 回答