显示属于BETWEEN特定日期的表的值

时间:2015-03-04 19:35:03

标签: sql-server-2008 between

我对SQL很新,但我想知道如何实现以下功能。当表中的日期格式如下所示时,如何获得2013年的特定值:

1   94  pH  02-02-2012 11:48 AM 1200001
2   103 pH  09-06-2012 11:48 AM 1200002
3   96  pH  15-06-2011 3:12 PM  1200003
4   111 HP  02-02-2011 8:55 AM  1200015
5   89  JP  12-12-2012 1:32 PM  1200007
6   90  Nic 19-06-2012 3:12 PM  1200009
7   99  Nic 21-01-2013 9:55 AM  1200012
8   102 pH  09-01-2013 3:23 PM  1200011
9   96  pH  15-02-2013 2:54 PM  1200003

我也想使用几乎看起来像这样的BETWEEN子句:

USE Daspoort_Clinic
Go

SELECT Con_Consult_Date,
  GETDATE() AS qwe,
  CAST(GETDATE() AS date) AS qweewq,
  CONVERT(nvarchar(30), GETDATE(), 105) AS asd
FROM Consultation
--WHERE Con_Consult_Date BETWEEN '01-01-2013' AND '31-12-2013'
GO

我似乎无法使其工作,因为它只接受GETDATE()值并且不会在Con_Consult_Date列中转换日期(类型为varchar(30))。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

您不能将BETWEEN用于日期时间值;它只对date和smalldate值可靠地工作。您必须手动构建范围谓词,如下所示:

WHERE ThisBeginDateTime <= dateTimeColumn AND dateTimeColumn < NextBeginDateTime

如果这是连接谓词而不是过滤谓词,则可能必须将Periods表自行连接(使用LEFT JOIN)给自身,以便为NextBeginDateTime获取适当的值。

虽然绝对优先将您的日期时间值存储在数据库中而不是字符串中,但此方法仍然可以使用日期时间值的格式正确的字符串表示。

P.S。

将BETWEEN与日期时间值一起使用的困难在于,以及实现和版本相关很难在日期中正确确定最后可能的有效且可表示的日期时间范围。

答案 1 :(得分:-1)

试试这个

SELECT Consult_No, Con_Hist_BMI, Con_Hist_UrineTest,Con_Consult_Date,Patient_No
FROM Consultation
WHERE Con_Consult_Date BETWEEN '01-01-2013 12:00 AM' AND '31-12-2013 11:59 PM'