如何在MySQL中选择特定数据类型的常量列

时间:2017-08-28 16:28:35

标签: mysql sql

我有这个(简化的)查询,它在MySQL(5.7.17)中不起作用:

SELECT a.*, CAST(NULL AS BLOB) AS fake_column FROM table1 a

我想要实现的是从数据库中选择一些真正的列,并为它们添加一个特定类型的常量列。

这在SQLite中正常工作,在MS-SQL Server中似乎也是正确的语法,如question中所述。

但在MySQL中,它失败了(只使用MySQL Workbench),错误代码为 1064(您的SQL语法中有错误;请查看与您的MySQL服务器版本对应的手册,以获得正确的语法使用近...) 。实际上,所有这些都以同样的方式失败:

CAST(NULL AS BIGINT) AS fake_column
CAST(0 AS BIGINT) AS fake_column
CAST(999 AS BIGINT) AS fake_column
CAST(NULL AS SMALLINT) AS fake_column
CAST(0 AS SMALLINT) AS fake_column
CAST(999 AS SMALLINT) AS fake_column
CAST(NULL AS BIT) AS fake_column
CAST(0 AS BIT) AS fake_column
CAST(1 AS BIT) AS fake_column

MySQL支持标准的CAST和CONVERT函数,但是它们接受的类型似乎存在一些限制,或者我正在构建一个常量。使用字符串更好。例如,CAST到CHAR(500)可以工作。

是否有已知的解决方法?

更新

我试图定义这个用户功能:

DELIMITER $$

CREATE FUNCTION null_blob RETURNS blob
BEGIN
    RETURN NULL;
END$$

DELIMITER ;

但我仍然得到完全相同的错误代码1064。

2 个答案:

答案 0 :(得分:1)

似乎没有方法可以投放到BITBIGINTSMALLINT,但您可以投放到SIGNEDUNSIGNED(我刚用MySQL 5.7.7测试过。

当您将这些常量添加到来自其他字段的实际数据时,MySQL应该在添加时自动将这些常量视为适当的数据类型。

另请参阅How can I cast an int to a bit in MySQL 5.1?

答案 1 :(得分:0)