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

Sql server SQL日期时间比较

Sql server SQL日期时间比较,sql-server,datetime,Sql Server,Datetime,我想从我的表中获取一些值,因为它的datetime列有一些条件 我想从名为“LocalHotels”的表中获取指定城市的所有酒店价值。我还应该声明两个DateTime值。第一个值应小于或等于“开始”列中的酒店值,即datetime数据类型。第二个值应大于或等于“截止日期”列中的酒店值,即datetime数据类型 这两列中的所有datetime值均以德语CultureInfo格式插入 当我在下面陈述问题时,没有问题 string query = "SELECT * FROM LocalHotels

我想从我的表中获取一些值,因为它的datetime列有一些条件

我想从名为“LocalHotels”的表中获取指定城市的所有酒店价值。我还应该声明两个
DateTime
值。第一个值应小于或等于“开始”列中的酒店值,即
datetime
数据类型。第二个值应大于或等于“截止日期”列中的酒店值,即
datetime
数据类型

这两列中的所有
datetime
值均以德语
CultureInfo
格式插入

当我在下面陈述问题时,没有问题

string query = "SELECT * FROM LocalHotels WHERE city='LONDON' AND start <='5.12.2015 00:00:00' AND deadline >='8.12.2015 00:00:00' ORDER BY city";
我得到了一个SQLException,它表示:

结果将varchar数据类型转换为datetime数据类型 在超出范围的值中

试着改变

15.12.2015 00:00:00 


另一个日期的格式也一样。

即使在欧洲和世界各地,将月份作为日期中三项中的第二项也是非常合理的。在美国,在本例中,很明显,SQL的日期时间是MM.DD.YYYY,因此您将选择第15个月和第18个月

因此,您应该使用

string query "SELECT * FROM LocalHotels WHERE city='LONDON' AND start <='12.15.2015 00:00:00' AND deadline >='12.18.2015 00:00:00' ORDER BY city"
string query“从本地酒店中选择*,其中city='LONDON'和start='12.18.2015 00:00:00'按城市排序”

string查询“从本地酒店中选择*,其中city='LONDON'和start='2015-12-18'按城市订购”

测试上述查询,以获得所需格式的日期(用日期或日期列替换
GetDate()
)。
正如其他人指出的,您需要YYYY-MM-DD格式。

您可以通过运行以下查询来查看SQL Server的日期和时间格式:

SELECT
    GETDATE()
如您所见,格式为YYYY-MM-DD HH:MM:SS.MMM。坚持这一点,您将不会遇到任何意外的转换错误

编辑

是一种标准的日期格式。发件人:

使用ISO 8601格式的优点是,它是一个国际标准,具有明确的规范。此外,此格式不受SET-DATEFORMAT或SET-LANGUAGE设置的影响

出于这个原因,我建议它优先于所有其他格式。示例:

2020-02-25
20200225

2020-02-25T18:37:00

是mysql还是sql server?也许您的数据库管理员认为您的
15
18
是月,而不是天?您是否尝试过使用小于或等于
12
的值?它是sql server。我尝试了小于12的月份值,结果没有改变。在字符串中写入日期进行比较时,始终使用通用格式YYMMDD-没有问题。对于日期文本,我更喜欢ODBC格式:日期为
{d'2015-12-05'}
,时间为
{t'23:30:00'
,日期时间为
{ts'2015-12-05 23:30:00'}
。这些格式不需要任何(隐式)转换。@Shnugo-不幸的是,
YYYY-MM-DD
不适用于所有地区,例如,法语()这适用于
SQL Server(从2008年开始)
Azure SQL数据库
Azure SQL数据仓库
并行数据仓库
string query "SELECT * FROM LocalHotels WHERE city='LONDON' AND start <='12.15.2015 00:00:00' AND deadline >='12.18.2015 00:00:00' ORDER BY city"
string query "SELECT * FROM LocalHotels WHERE city='LONDON' AND start <='2015-12-15' AND deadline >='2015-12-18' ORDER BY city"
SELECT CONVERT(char(10), GetDate(),126)
select convert(varchar,getDate(),112)
select replace(convert(varchar, getdate(), 111), '/','-')
SELECT
    GETDATE()