如何从表中选择datetime = date

时间:2013-07-21 10:09:29

标签: sql-server sql-server-2008-r2

我有payment表,其中一列p_craetedate类型p_createdateDateTime

CREATE TABLE [dbo].[tbl_Payments](
    [p_id] [bigint] IDENTITY(100000,1) NOT NULL,
    [p_amount] [int] NOT NULL,
    [p_status] [tinyint] NOT NULL,
    [p_createdate] [datetime] NOT NULL,
    [p_creditor] [int] NOT NULL,
    [p_debtor] [int] NOT NULL,
    [p_type] [int] NOT NULL,
 CONSTRAINT [PK_tbl_Payments] PRIMARY KEY CLUSTERED )

我希望获得在'2013-07-16'

创建的行

3 个答案:

答案 0 :(得分:3)

使用SQL Server 2008 及更新版本中的DATE数据类型:

SELECT (list of columns)
FROM dbo.tbl_Payments
WHERE CAST(p_createddate AS DATE) = '20130716'

DATE数据类型只包含日期 - 没有时间部分 - 因此与ISO-8601格式的20130716进行比较(适用于SQL Server的任何语言/区域设置)将为您提供2013年7月16日创建的所有行 - 无论何时何地。

答案 1 :(得分:1)

您可以使用之前某些答案中的查询,但请先阅读sargable

SELECT * FROM tbl_Payments
WHERE p_createdate >= '20130716'
    AND p_createdate < '20130717'

答案 2 :(得分:0)

SELECT (list of fields)
FROM dbo.YourTable
WHERE dateValue >= DATEADD(dd, DATEDIFF(dd,0,'2013-07-16 00:00'), 0) 
AND dateValue < DATEADD(dd, DATEDIFF(dd,0,'2013-07-17 00:00'), 1)