Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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

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 SERVER_Sql_Sql Server - Fatal编程技术网

日期时间查询SQL SERVER

日期时间查询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是一个糟糕的设计选择。始终使用代表您的数据的数据类型;将日期存储

我在日期时间格式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
是一个糟糕的设计选择。始终使用代表您的数据的数据类型;将日期存储为
日期
,将数字存储为
整数
/
十进制
,等等

根据[文档]没有
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。什么是订单日期?字符串字段(坏主意)?A
datetime
?或者您是否有单独的日期和时间字段?您不需要字符串转换,您需要使用适当的日期函数来过滤结果。例如,您可以在…之间使用
cast(订单日期作为时间)
,尽管这不会使用任何索引数据时间没有格式,所以我们仍然不知道此列的数据类型。非常感谢您的回答datetime 2和Tryconvert不是公认的内置函数名sql server 2014。@Bilal
datetime 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';