【问题标题】:SQL data type mismatch for integers and dates整数和日期的 SQL 数据类型不匹配
【发布时间】:2016-08-22 17:54:21
【问题描述】:

我正在使用 MSquery 并有以下 sql 查询:

SELECT `Sheet1$`.colA, `Sheet1$`.colB, 
Switch(
colA = '1.0', 'A1',
colA = '2.0', 'A2',
colA = '3.0', 'C1',
colA = '4.0', 'C2'

)AS colG


FROM (

SELECT `Sheet1$`.colA, `Sheet1$`.colB
FROM `Sheet1$` `Sheet1$`
UNION ALL
SELECT `Sheet2$`.colC, `Sheet2$`.colD
FROM `Sheet2$` `Sheet2$`
) t;

我收到一条错误消息:条件表达式中的数据类型不匹配。我认为这与我在 switch 语句中的数字周围使用单引号这一事实有关。

我有两个表并正在附加它们。然后添加一个额外的列,并且应根据每行 A 列中的值添加不同的消息。当我将 A 列作为文本时,此查询有效,但是当我尝试使用数字或日期时,我收到错误消息。我需要使用什么来代替数字和日期的单引号?将要显示的消息使用单引号可以吗?

非常感谢。

【问题讨论】:

  • 试试[Sheet1$] 而不是反引号。
  • colA 当前是文本还是数字?
  • colA 是数字。为了进行测试,我最初使用了文本,它可以按我的意愿工作,但是当我将其更改为数字时,我会收到错误消息。除了数字,我还想知道如何使用日期。

标签: sql excel ms-access


【解决方案1】:

colA 更改为数字类型,然后使用以下查询:

SELECT `Sheet1$`.colA,
        `Sheet1$`.colB, 
       SWITCH (
           colA = 1.0, 'A1',
           colA = 2.0, 'A2',
           colA = 3.0, 'C1',
           colA = 4.0, 'C2'
       ) AS colG
FROM
(
SELECT `Sheet1$`.colA,
       `Sheet1$`.colB
FROM `Sheet1$` `Sheet1$`
UNION ALL
SELECT `Sheet2$`.colC,
       `Sheet2$`.colD
FROM `Sheet2$` `Sheet2$`
) t;

【讨论】:

  • 谢谢,这适用于数字。如果 colA 是日期而不是数字,你知道我会怎么做吗?
  • SWITCH 函数中使用 colA = #2016-08-22#, 'A1'
猜你喜欢
  • 2019-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-17
  • 1970-01-01
  • 2017-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多