SQL尝试在同一选择结果列中使用文本和日期

时间:2019-06-12 09:00:23

标签: mysql sql datetime

我正在执行以下查询

SELECT 
  IIF( (itemType = 1 OR itemType = 2), 'NA', CONVERT (DATE, createdAt)) AS 'date',
  itemType AS 'type',
  bar AS 'anything'
FROM table1

我希望得到类似的东西

+------------+---------+-----------+
|  date      |  type   | anything  |
+------------+---------+-----------+
| 2019-01-01 |    0    |  blah     |
| NA         |    1    |  blah     |
| 2019-02-15 |    0    |  blah     |
| 2018-08-10 |    0    |  blah     |
| NA         |    2    |  blah     |
|            |    0    |  blah     |
+------------+---------+-----------+

但出现以下错误

Error converting date and/or time from character string [SQL State=S0001, DB Errorcode=241]

如果我更改了'NA'子句中的IIF,那么我会在日期列中得到1900-01-01的日期,该日期应该为空。

所以我看到选择的结果列是datetime格式的列

是否可以放置'NA'字符串而不是日期?

PD:我需要执行CONVERT (DATE, createdAt),以便从网页下载时以预期的格式导出日期。

PD2:有些项目没有日期,所以我需要在没有日期时显示Null,在itemType为1或2时显示“ NA”

3 个答案:

答案 0 :(得分:1)

您不能同时拥有字符串'NA'和DATE日期类型

我的建议使用很大的日期或使用NULL而不是NA

SELECT 
  IIF( (itemType = 1 OR itemType = 2), CONVERT (DATE, '9999-1-1')), CONVERT (DATE, createdAt)) AS 'date',

OR

SELECT 
  IIF( (itemType = 1 OR itemType = 2), 'NA', CONVERT(VARCHAR, CAST(createdAt AS DATE), 105)) AS 'date',

答案 1 :(得分:0)

您可以在下面尝试-

SELECT 
  case when itemType in(1,2) then 'NA' else cast(createdAt as date) end AS 'date',
  foo AS 'something',
  bar AS 'anything'
FROM table1

答案 2 :(得分:0)

我建议使用NULL代替“ NA”

SELECT 
  IIF( (itemType = 1 OR itemType = 2), NULL, CONVERT (DATE, createdAt)) AS 'date',
  itemType AS 'type',
  bar AS 'anything'
FROM table1