Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.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/2/shell/5.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-日期时间转换+参数_Sql_Sql Server_Datetime - Fatal编程技术网

SQL-日期时间转换+参数

SQL-日期时间转换+参数,sql,sql-server,datetime,Sql,Sql Server,Datetime,网上有很多关于这个的东西,但我就是找不到任何正确的东西 我需要从一个特定的表中查找所有内容,其中参数中的日期位于该表的“timestamp”datetime中 这么说吧 Select g.* From egtable..headerinfo as g WHERE g.istatus BETWEEN 5 AND 10 AND REPLACE(LEFT(CONVERT (varchar, timestamp, 101),10),' ','-') = convert(datetime,'<%p

网上有很多关于这个的东西,但我就是找不到任何正确的东西

我需要从一个特定的表中查找所有内容,其中参数中的日期位于该表的“timestamp”datetime中

这么说吧

Select g.* 
From egtable..headerinfo as g
WHERE g.istatus BETWEEN 5 AND 10 AND
REPLACE(LEFT(CONVERT (varchar, timestamp, 101),10),' ','-') = convert(datetime,'<%parameterDate%>')
时间戳显示为“yyyy-mm-dd hh:mm:ss” 我的参数日期为“mm/dd/yyyy”

我的目标是最终去掉时间,转换日期,然后与参数进行比较。 在此方面的任何帮助都将不胜感激。我尝试了无数种组合,但似乎没有任何效果:

谢谢
B

假设您使用的是MySQL,因为您没有说明您使用了什么,所以可以使用:

Select g.* 
From egtable..headerinfo as g
WHERE g.istatus BETWEEN 5 AND 10 AND
 timestamp = MAKEDATE(SUBSTRING('<%parameterDate%>', 4, 2), 
                      SUBSTRING('<%parameterDate%>', 1, 2), 
                      SUBSTRING('<%parameterDate%>', 6, 4))

MySQL中的MAKEDATE根据接收的日、月、年输入为您创建一个日期字段

如果您使用的是SQL Server,您的查询看起来是这样的,并且SQL Server版本号是2008或更高版本,您可以通过将datetime转换为date来轻松删除时间部分

在您的情况下,它将是:

Select g.* 
From egtable..headerinfo as g
WHERE g.istatus BETWEEN 5 AND 10 AND
cast([timestamp] as date) = cast('<%parameterDate%>' as date)

不需要两者都转换,最好是将传入的数据参数转换为SQL格式,而不是反过来,因为SQL使用的索引和搜索会更快。您的代码是否希望在MS SQL上工作?是的。我从来没有这样想过。因此,我可以将参数转换为日期+23:59:59。。如果有人能建议如何做,我将不胜感激。仅从SQL开始,这是VBA的一个学习曲线。我认为您不需要转换,正如我在下面所说的,大多数SQL Server将使用一个仅日期字段并向其添加midnight,或者以另一种方式,使用datetime字段并删除时间部分(如果根据仅日期字段进行验证),如果您希望添加23:59:59的日期,这几乎总是一个迹象,表明您应该在一段时间内切换到使用独占端点使用大多数SQL在比较之前不需要这种情况,它们自己做,MS SQL不是自动处理吗?@nrathaus如果您比较日期时间类型,您总是比较日期和时间。转换到日期是比较日期的一种简单方法。很抱歉造成混淆,我使用的是SQL Server。如何将强制转换部分添加到代码中。我只是快速尝试了一下,显然我做得不对。非常感谢你的反馈。前几天,我对这件事还很冷淡。但现在似乎正在现场工作。谢谢关于这一点还有一个更快的问题。我的参数的日期格式根本不算数吗?它看起来不太像,但我只是想确定一下?对不起,我不能用这个。不使用MySQL。请参阅如何在MSSQL中执行类似操作
Select g.* 
From egtable..headerinfo as g
WHERE g.istatus BETWEEN 5 AND 10 AND
cast([timestamp] as date) = cast('<%parameterDate%>' as date)