连接日期和 varchar

use*_*152 1 mysql cast concat date

我需要从mysql的表中选择存储在列transactionDate数据类型中的日期date和存储在列transactionTime数据类型中的时间。我的查询就像varchartransactionTable

select concat( CAST( transactionDate as char), transactionTime) as transaction  
from transactionTable 
where id = 123
Run Code Online (Sandbox Code Playgroud)

两列中都有值,但以上返回一个空值。如何连接datevarchar列?

ype*_*eᵀᴹ 5

当参数之一为空时,该CONCAT()函数返回NULL。您可以使用COALESCE()绕过该问题,将空值转换为空字符串 - 或任何其他常量值,例如'00:00:00'时间部分:

select concat( coalesce(cast(transactionDate as char), ''), 
               ' ', 
               coalesce(transactionTime, '00:00:00')
             ) as transaction  
from transactionTable 
where id = 123 ;
Run Code Online (Sandbox Code Playgroud)

事实上,你并不真正需要一个显式cast(),转换char为隐式:

select concat( coalesce(transactionDate, ''), 
               ' ', 
               coalesce(transactionTime, '00:00:00')
             ) as transaction  
from transactionTable 
where id = 123 ;
Run Code Online (Sandbox Code Playgroud)

  • @Nico 你在说什么?你能证明你的说法“ISNULL()”比“COALESCE()”快吗? (5认同)
  • 更不用说 MySQL 的 `ISNULL()` 返回 `1` 或 `0`。它不同于 SQL-Server 的“ISNULL()”(我猜你把它混淆了)。 (4认同)