日期时间查询SQL SERVER
我在日期时间格式Isdat中有日期列Order\U Date 2018年5月14日13:13:06这是格式),我需要在下午14:00之前提取今天的订单,在第二列中,我希望在下午15:00之后提取订单,即SQL SERVER中从下午15:00到下午23:00的时间 日期为24:00 Hor格式日期时间查询SQL SERVER,sql,sql-server,Sql,Sql Server,我在日期时间格式Isdat中有日期列Order\U Date 2018年5月14日13:13:06这是格式),我需要在下午14:00之前提取今天的订单,在第二列中,我希望在下午15:00之后提取订单,即SQL SERVER中从下午15:00到下午23:00的时间 日期为24:00 Hor格式 在输出顺序中,日期应为'yyyy-MM-dd hh:MM:ss'格式,正如其他人所说,您需要做的第一件事是修复数据;将日期存储为varchar是一个糟糕的设计选择。始终使用代表您的数据的数据类型;将日期存储
在输出顺序中,日期应为'yyyy-MM-dd hh:MM:ss'格式,正如其他人所说,您需要做的第一件事是修复数据;将日期存储为
varchar
是一个糟糕的设计选择。始终使用代表您的数据的数据类型;将日期存储为日期
,将数字存储为整数
/十进制
,等等
根据[文档]没有dd/MM/yyyy hh:MM:ss
的样式代码,但是,下面的快速SQL告诉我样式代码103可以工作:
DECLARE @date varchar(50) = '31/05/2017 19:12:56';
WITH N AS (
SELECT 1 AS i
UNION ALL
SELECT i + 1
FROM N
WHERE I + 1 <= 150)
SELECT I, TRY_CONVERT(datetime2(0),@Date,I) AS Conversion
FROM N
OPTION (MAXRECURSION 150);
好了,现在我们已经摆脱了你糟糕的数据类型,得到了你的新专栏。好
现在,您想在这里具体查询时间;如果这样做,理想情况下,您希望将时间和日期的值分开。在'14:00'和'15:00'之间使用类似于WHERE CONVERT(time,YourDateColumn)
的方法会使查询变得不可搜索。因此,让我们使用两个计算列:
ALTER TABLE YourTable ADD OrderDate AS CONVERT(date, YourDateColumn);
ALTER TABLE YourTable ADD OrderTime AS CONVERT(time, YourDateColumn);
现在,针对您手头的问题:“我需要在下午14:00点之前提取今天的订单,在第二列中,我希望在下午15:00之后提取订单,即在SQL SERVER中从下午15:00到下午23:00的时间”。老实说,这是不理智的;根据时间在不同的列中下不同的订单?恐怕我不知道你在这里的意思,我也没有样本数据或预期结果。因此,我将向您展示如何在特定日期的14:00之后但在'15:00'之前退货:
SELECT *
FROM YourTable YT
WHERE OrderDate = '20170515'
AND OrderTime >= '14:00'
AND OrderTime < '15:00';
选择*
从你的桌子上
其中OrderDate='20170515'
和订单时间>='14:00'
订单时间<'15:00';
如果你需要更多的细节,你会有很多评论要求你提供更多的细节;我建议你看看这些 您的列是什么数据类型?示例数据和期望的结果将非常有用。我无法判断您是否要筛选行或添加新列,或者要执行什么操作。我不确定“提取今天的订单”是什么意思。日期类型没有格式。它们是二进制值。格式仅在解析文本或将日期值格式化为文本时适用。你到底想做什么?您正在尝试向查询传递日期参数吗?还是向最终用户显示结果?在这两种情况下,您都不应该在使用的查询和实际的表定义之前使用strings。什么是订单日期?字符串字段(坏主意)?Adatetime
?或者您是否有单独的日期和时间字段?您不需要字符串转换,您需要使用适当的日期函数来过滤结果。例如,您可以在…之间使用cast(订单日期作为时间)
,尽管这不会使用任何索引数据时间没有格式,所以我们仍然不知道此列的数据类型。非常感谢您的回答datetime 2和Tryconvert不是公认的内置函数名sql server 2014。@Bilaldatetime 2
和Tryconvert
都不是否,因为它们的拼写都不正确。这是datetime2
和尝试转换
datetime2
,并于2012年尝试转换。它们都在SQL Server 2014中。@Bilal供您参考:&。在声明SQL Server版本中不存在某些内容之前,请进行一些尽职调查。:)
SELECT *
FROM YourTable YT
WHERE OrderDate = '20170515'
AND OrderTime >= '14:00'
AND OrderTime < '15:00';