【发布时间】:2020-01-06 15:42:24
【问题描述】:
我目前正在努力解决以下问题:
我有一个选择datetime 列的SQL 查询。接下来我进行转换以获取时间。
bc.StartTime as startdatetime,
CONVERT(TIME,bc.starttime) as starttime,
输出如下所示:
startdatetime starttime
-------------------------------------------
2019-04-14 19:13:53.000 19:13:53.0000000
2019-04-15 00:00:00.000 00:00:00.0000000
到目前为止一切顺利,但现在,我想过滤掉“00:00:00.0000000”时间。
我尝试了几种方法,例如:
AND CONVERT (time, bc.starttime) != '00:00:00.0000000'
AND bc.starttime NOT LIKE '%00:00:00.000'
但它们都不起作用。
starttime 还包含“NULL”——我想保留在我的结果中。
有人可以帮助我吗?
编辑:
感谢大家的贡献!
我有 4 列; actdatetime、bcstarttime、日期和时间。 我会尽量解释我想要什么:
日期和时间列是从 bcstarttime 列转换而来的列。
但我想过滤掉结果中的“00:00:00”时间。 因为该列是别名,所以它不想在我的“WHERE”子句中声明。
如果我执行以下操作:
WHERE bc.StartTime != '00:00:00'
然后它还会“销毁”我的 NULL 值(我想保留在结果中)。
这可能是我忽略的新手......
【问题讨论】:
-
你能添加一个你的数据表的例子吗?
-
这将有助于查看您的整个查询不起作用。一种可能的混淆来源是您将 [starttime] 用作原始列名(具有日期部分)和仅时间部分的列别名。您还将时间或日期时间与字符串进行比较,并且显式转换可以更安全,以便您的比较比较相同的类型。否则会发生隐式转换,适用的规则和格式可能不是你所期望的。
-
“它们都没有工作”的调试值为零。你有错误吗?不想要的行被退回?你想要的行被过滤掉了?查询还在运行吗?
标签: sql tsql datetime sql-like