Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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
Sql 如何将datetime转换为时间格式_Sql_Sql Server_Datetime_Sql Server 2012 - Fatal编程技术网

Sql 如何将datetime转换为时间格式

Sql 如何将datetime转换为时间格式,sql,sql-server,datetime,sql-server-2012,Sql,Sql Server,Datetime,Sql Server 2012,我有一个以sql返回日期时间格式的查询: SELECT time_in FROM job_punch_card WHERE emp_key=47 and punch_day<= DATEADD(week, DATEDIFF(day, 0, getdate())/7, 0) 但我无法将此应用于我自己的查询。如何仅从上表中的time\u中检索时间?在输出列上使用相同的CONVERT功能: SELECT CONVERT(VARCHAR(8), time_in, 108) AS time

我有一个以sql返回日期时间格式的查询:

SELECT time_in  
FROM job_punch_card  
WHERE emp_key=47 and punch_day<= DATEADD(week, DATEDIFF(day, 0, getdate())/7, 0)

但我无法将此应用于我自己的查询。如何仅从上表中的
time\u中检索时间?

在输出列上使用相同的
CONVERT
功能:

SELECT CONVERT(VARCHAR(8), time_in, 108) AS time_in  
FROM job_punch_card  
WHERE emp_key=47 and punch_day<= DATEADD(week, DATEDIFF(day, 0, getdate())/7, 0)
选择CONVERT(VARCHAR(8),time_in,108)作为time_in
从工作打孔卡

其中emp_key=47和punch_day几乎完全相同:

SELECT CONVERT(VARCHAR(8), time_in, 108)
FROM job_punch_card  
WHERE 
    emp_key=47 and 
    punch_day<= DATEADD(week, DATEDIFF(day, 0, getdate())/7, 0)
选择CONVERT(VARCHAR(8),time_in,108)
从工作打孔卡
哪里
emp_键=47和
打孔日尝试:

选择CONVERT(VARCHAR(8),time_in,108)作为time_in_time_only
从工作打孔卡
其中emp_key=47

如果您需要将其作为时间类型,请使用日期类型。如果您必须对结果集进行任何计算,这将使事情变得更容易

SELECT CAST(time_in AS TIME(0)) AS time_in
FROM job_punch_card
etc., etc.

Getdate()
替换为
中的
time\u
选择CONVERT(VARCHAR(8),time_in,108)
看起来像操作需要
HH:MM:SS
。但这是毫秒级的结果,而且捕捉得很好!我试图避免使用
CONVERT
函数,因为我从来都不喜欢像结尾处的108这样看起来随意的数值——我发现它们不可读。我可以添加一些代码来缩短时间,但这会使答案变得太复杂。虽然我很不喜欢它,
CONVERT
是一种方式:)我会很快删除这个答案。你可以使用
CAST(time\u in as time(0))
这将给出HH:MM:ssThank@mheptinstall,我意识到在我点击“添加评论”之后,我会立即更新我的答案。。。哎呀,看来是NoDisplayName处理的。感谢两位改进了答案!看起来OP需要
HH:MM:SS
。但您的第二个查询的结果是Milliseconds@NoDisplayName然后使用
TIME(0)
而不是
TIME
,或者在应用程序中处理它,不管怎样,它都应该负责格式化。返回时间的数据类型有助于实现这一点。海报没有直接指定他们需要或不需要毫秒,只是希望能够提取时间。OP需要的结果类似于
convert(..,108)
,其中不包括毫秒
SELECT CONVERT(VARCHAR(8),time_in,108) AS time_in_time_only
FROM job_punch_card  
WHERE emp_key=47 
    and punch_day<= DATEADD(week, DATEDIFF(day, 0, getdate())/7, 0)
SELECT CAST(time_in AS TIME) AS time_in_time_only
FROM job_punch_card  
WHERE emp_key=47 
    and punch_day<= DATEADD(week, DATEDIFF(day, 0, getdate())/7, 0)
SELECT CAST(time_in AS TIME(0)) AS time_in
FROM job_punch_card
etc., etc.