转换日期时间未运行以查看

时间:2015-08-28 16:36:52

标签: sql-server sql-server-2008 datetime view

我尝试了这个查询。但它没有运行。我该怎么办?

SELECT dbo.isemri_data.sipnum, 
       dbo.kayitlar.id, 
       dbo.kayitlar.makina_id, 
       dbo.kayitlar.personel, 
       dbo.kayitlar.isemrino, 
       dbo.kayitlar.tarih, 
       dbo.kayitlar.gercek_hiz, 
       dbo.kayitlar.durus_kod, 
       dbo.kayitlar.miktar, 
       dbo.kayitlar.fire 
FROM   dbo.isemri_data 
       LEFT OUTER JOIN dbo.kayitlar 
                    ON dbo.isemri_data.isemrino = dbo.kayitlar.isemrino 
WHERE  CONVERT(VARCHAR(10), dbo.kayitlar.tarih, 104) BETWEEN 
              CONVERT(VARCHAR(10), '12.08.2015', 104) AND 
              CONVERT(VARCHAR(10), '19.08.2015', 104) 
       AND CONVERT(VARCHAR(3), dbo.kayitlar.makina_id) = 'M1' 
       AND dbo.kayitlar.isemrino LIKE '%' 

如果删除

CONVERT(varchar(10),dbo.KAYITLAR.TARIH,104) BETWEEN convert(varchar(10),'12.08.2015',104) and convert(varchar(10),'19.08.2015',104)

查询正在运行。

或者如果只运行到主表,则表示已经运行了我的查询。

我无法找到问题所在。

2 个答案:

答案 0 :(得分:1)

由于您已经提到过数据类型是Datetime,请不要将其转换为where子句中的任何其他内容,如果您愿意,请在select中执行。

SELECT dbo.isemri_data.sipnum, 
       dbo.kayitlar.id, 
       dbo.kayitlar.makina_id, 
       dbo.kayitlar.personel, 
       dbo.kayitlar.isemrino, 
       dbo.kayitlar.tarih, 
       dbo.kayitlar.gercek_hiz, 
       dbo.kayitlar.durus_kod, 
       dbo.kayitlar.miktar, 
       dbo.kayitlar.fire 
FROM   dbo.isemri_data 
       LEFT OUTER JOIN dbo.kayitlar 
                    ON dbo.isemri_data.isemrino = dbo.kayitlar.isemrino 
       AND  dbo.kayitlar.tarih  >= '20150812'  -- use ANSI date YYYYMMDD
       AND  dbo.kayitlar.tarih <=  '20150819'  -- use ANSI date YYYYMMDD
       AND  CONVERT(VARCHAR(3), dbo.kayitlar.makina_id) = 'M1' 
       AND  dbo.kayitlar.isemrino LIKE '%' 

将日期时间转换为字符串意味着sql server将它们视为字符串而不是日期/日期时间值,因此您将获得意外结果此外,如果存在,则sql server将无法使用该列上定义的任何索引任何。

保持日期/日期时间值不变,并更改表示层中日期的格式,以便更容易看到日期/日期时间格式。

答案 1 :(得分:0)

我发现了答案。如果我使用

dbo.kayitlar.tarih BETWEEN               CONVERT(DATETIME,&#39; 12.08.2015&#39;,104)AND               CONVERT(DATETIME,&#39; 19.08.2015&#39;,104)

运行查询。

thanx求助