在SQL中使用带有多列选择的强制转换

时间:2012-11-08 04:04:20

标签: sql sql-server casting

基本上我想让这个命令起作用:

$sql = "SELECT (EntryDate + TotalTime) as DataLine FROM TimeSheet WHERE EmployeeID='AA01'";

EntryDate在数据库中作为文本,但TotalTime是一个数字。我需要将TotalTime转换为文本,因为我注意到如果我将两种不同类型的值组合在一起,它只会消除输出。

我知道我应该使用CAST(TotalTime作为XXX),但我不确定我可以合法地将它投入到(char / nchar似乎不起作用,字符串也不是文本)。我总是得到一个错误的形式...

Syntax error (missing operator) in query expression '(EntryDate + CAST(TotalTime as string) as DataLine FROM TimeSheet WHERE EmployeeID='AA01''

我能得到一些帮助吗?谢谢!

编辑我想请注意,这并不是要将EntryDate和TotalTime的值一起添加到一起来生成单个值。我只是希望它能够将EntryDate值和TotalTime值组合成一行,其内容如下:

“10/31/12 9.25”

再次编辑我很抱歉之前未指定,我正在使用MSSQL

2 个答案:

答案 0 :(得分:5)

请改为尝试:

SELECT 
  CAST(EntryDate AS VARCHAR(25)) + CAST(TotalTime AS VARCHAR(10)) as DataLine 
FROM TimeSheet 
WHERE EmployeeID = 'AA01';

但是,如果entrydate是一个日期并且int totaltime是一个时间,那么最好考虑将它们作为日期时间对象添加为时间部分依赖于日期时间对象。在您正在使用的RDBMS上。如果可能,使用DATETIME数据类型来表示日期和时间部分,而不是两部分。像这样:

SELECT DATEADD(hh, totaltime, entrydate)
FROM TimeSheet
WHERE EmployeeID = 'AA01';

SQL Fiddle Demo

答案 1 :(得分:0)

MSSQL:

$sql = "SELECT EntryDate+''+CAST(TotalTime as char(25)) as DataLine FROM TimeSheet WHERE EmployeeID='AA01'";

的MySQL

$sql = "SELECT CONCAT(EntryDate,' ',CONVERT(TotalTime,char(25))) as DataLine FROM TimeSheet WHERE EmployeeID='AA01'";