我有类似的SQL服务器查询:
SELECT * FROM mytable
WHERE company_name = 'Shell'
and datetime >= '2017-03-06'
and datetime <= '2017-03-06'
ORDER BY datetime DESC
现在代码显示所有Shell行甚至在搜索日期之外。
我只想在2017-03-06
中使用Shell行。
我的错误在哪里?
此代码通常在MySQL服务器中运行良好。
答案 0 :(得分:1)
CAST(datetime AS DATE)并仅与日期进行比较
SELECT * FROM mytable WHERE company_name = 'Shell' and CAST(datetime AS DATE)= '2017-03-06' ORDER BY datetime DESC
答案 1 :(得分:1)
我认为这是由您的日期服务器设置引起的(它不是使用03作为月份,而是作为日期)。 始终使用
CREATE TABLE mytable (ID INT, COMPANY_NAME VARCHAR(10), DATETIME DATETIME)
SELECT * FROM mytable
INSERT INTO mytable VALUES (1,'Shell', '2017-03-06')
INSERT INTO mytable VALUES (2,'Shell', '2017-03-07')
INSERT INTO mytable VALUES (3,'Shell', '2017-03-05')
INSERT INTO mytable VALUES (4,'Shell', '2017-03-06')
INSERT INTO mytable VALUES (5,'Nut', CONVERT(datetime, '2017-03-06',121))
INSERT INTO mytable VALUES (6,'Nut', CONVERT(datetime, '2017-03-07',121))
INSERT INTO mytable VALUES (7,'Nut', CONVERT(datetime, '2017-03-05',121))
INSERT INTO mytable VALUES (8,'Nut', CONVERT(datetime, '2017-03-06',121))
---Results can be uncorrect
SELECT ID, COMPANY_NAME, DATETIME, CONVERT(varchar,DATETIME,121) AS DATE_STR
FROM mytable
WHERE company_name = 'Shell'
AND DATETIME >= '2017-03-06'
AND DATETIME <= '2017-03-06'
ORDER BY DATETIME DESC
---Results correct
SELECT ID, COMPANY_NAME, DATETIME, CONVERT(varchar,DATETIME,121) AS DATE_STR
FROM mytable
WHERE company_name = 'Nut'
AND DATETIME >= CONVERT(datetime, '2017-03-06',121)
AND DATETIME <= CONVERT(datetime, '2017-03-06',121)
ORDER BY DATETIME DESC
答案 2 :(得分:0)
SELECT * FROM mytable WHERE company_name = 'Shell' and datetime like '2017-03-06%' ORDER BY datetime DESC
答案 3 :(得分:0)
你可以这样做:
SELECT *
FROM mytable
WHERE company_name = 'Shell'
and datetime >= '2017-03-06'
and datetime < '2017-03-07'
ORDER BY datetime DESC
它将获取 datetime 在“2017-03-06”的任何位置的所有行。
或者将 datetime 转换为 date 数据类型为 Anil Kumar 建议,然后使用datetime = '2017-03-06'
子句。
答案 4 :(得分:0)
关于sql server最重要的事情。 “总是考虑两次你写的标准”其他答案可以解决你的问题,但主要的问题是你的算法或编码sql的逻辑。你需要什么?这个问题的答案是“特定日期”,因此请指明日期。不要使用&lt;&gt;。我看到你将这些逻辑用于日期时间格式。所以转换为日期然后比较。如果你不需要小时,分钟或其他东西浪费它们。这种逻辑总是使你的问题变得简单。最好的问候。