Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 数据截断:使用CREATE TABLE SELECT语句时DATETIME值“”不正确_Mysql_Casting_Mariadb_Sql Insert - Fatal编程技术网

Mysql 数据截断:使用CREATE TABLE SELECT语句时DATETIME值“”不正确

Mysql 数据截断:使用CREATE TABLE SELECT语句时DATETIME值“”不正确,mysql,casting,mariadb,sql-insert,Mysql,Casting,Mariadb,Sql Insert,我试图从SELECT语句在MariaDB 10.3上创建一个表。该表包含客户信息和一列,显示该客户行缺少的元素。以下是示例设置: CREATE TABLE `customerTest` ( `custid` int(10) NOT NULL PRIMARY KEY, `firstname` char(16) DEFAULT NULL, `lastname` char(21) DEFAULT NULL, `birthdate` date DEFAULT NULL ) ENGINE=

我试图从SELECT语句在MariaDB 10.3上创建一个表。该表包含客户信息和一列,显示该客户行缺少的元素。以下是示例设置:

CREATE TABLE `customerTest` (
  `custid` int(10) NOT NULL PRIMARY KEY,
  `firstname` char(16) DEFAULT NULL,
  `lastname` char(21) DEFAULT NULL,
  `birthdate` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


INSERT INTO `customerTest` VALUES (1,'Fred',NULL,'1950-01-01'),(2,'Barney',NULL,NULL),(3,'Wilma','Flintstone',NULL);
当不在CREATETABLE语句中使用时,查询可以工作

SELECT custid, customerMissingDemographics FROM (
    SELECT custid, GROUP_CONCAT(CONCAT_WS(',',FName,LName,Birthdate)) AS customerMissingDemographics FROM (
            SELECT c.custid,
            CASE WHEN firstname = '' OR firstname IS NULL THEN 'First Name' ELSE NULL END AS FName,
            CASE WHEN lastname = '' OR lastname IS NULL THEN 'Last Name' ELSE NULL END LName,
            CASE WHEN birthdate = '' OR birthdate IS NULL THEN 'Birthdate' ELSE NULL END Birthdate
            FROM `customerTest` c
            GROUP BY custid
            ) computeMissingDemographics
    GROUP BY computeMissingDemographics.custid
    ) aggregateMissingDemographics
 WHERE customerMissingDemographics <> ''
然而,若我尝试使用CREATETABLETEST创建一个包含此查询结果的表,它将失败 SQL错误[1292][22001]:数据截断:日期时间值不正确:


我试图在computeMissingDemographics表中强制转换字段,但没有效果。它为什么这样做?

这很有趣;在CREATE TABLE查询中使用SELECT查询时,似乎禁用了该查询中的某些隐式转换。您的问题在此测试中:

birthdate = ''
as不是有效的日期值。您可以通过在比较之前显式地将birthdate强制转换为CHAR来解决这个问题

CAST(birthdate AS CHAR) = ''

这很有趣;在CREATE TABLE查询中使用SELECT查询时,似乎禁用了该查询中的某些隐式转换。您的问题在此测试中:

birthdate = ''
as不是有效的日期值。您可以通过在比较之前显式地将birthdate强制转换为CHAR来解决这个问题

CAST(birthdate AS CHAR) = ''
无法按您希望的方式定义SELECT中的生日表达式

使用时

CREATE TABLE t
    SELECT ...
您可以选择添加/更改列/索引。对你来说,我建议

CREATE TABLE t (
       `Birthdate` date DEFAULT NULL
               )
    SELECT ...
无法按您希望的方式定义SELECT中的生日表达式

使用时

CREATE TABLE t
    SELECT ...
您可以选择添加/更改列/索引。对你来说,我建议

CREATE TABLE t (
       `Birthdate` date DEFAULT NULL
               )
    SELECT ...