将 GETDATE() 设置为仅给出 MSSQL 中默认值的日期

setting GETDATE() to only give out day on default value in MSSQL

我正在尝试在 MSSQL 中设置一个具有默认值或绑定当前日期的列。
我目前正在使用 GETDATE(),但这为我提供了包含小时、分钟、秒和毫秒的时间戳,我只需要日期部分 (2015-03-05)。

我在网上找到的唯一结果是在 SELECT 语句中更改它。

如果您在日期上下文中使用它SQL服务器会自动为您转换

DECLARE @date DATE = GETDATE();

SELECT  @date

-- result: 2015-03-05

或者您可以简单地使用演员表

SELECT CAST(GETDATE() as DATE)

编辑:

我仍然不确定我是否得到了你想要的,但如果你想将其作为默认约束,它的工作方式相同:

create table #table
(
    id int,
    insertDate date default GETDATE()
)

insert into #table (id) values (1)

select top 1 insertDate from #table

-- result: 2015-03-05

如果你只想存储日期,不包括时间,你可以使用这个:

CREATE TABLE #dts(id INT IDENTITY, d_date datetime2 DEFAULT CONVERT(char(10), GETDATE(), 126))
INSERT #dts DEFAULT VALUES 
SELECT * FROM #dts

但是它会 return 你清零而不是时间,如下所示:

id  d_date
-------------------------------
1   2015-03-05 00:00:00.0000000

您可以使用 LEFT 函数删除不需要的字符:

SELECT id, LEFT(d_date, 10) FROM #dts

它将return你:

id  d_date
--------------
1   2015-03-05

您可以通过使用 varchar 作为数据类型来实现此目的,但我认为这不是合适的解决方案,最好在 select 语句中格式化日期。但如果你真的需要它,那么这个就可以了:

CREATE TABLE #dts(id INT IDENTITY, d_date VARCHAR(10) DEFAULT CONVERT(char(10), GETDATE(), 126))
INSERT #dts DEFAULT VALUES 
SELECT * FROM #dts

输出:

id  d_date
--------------
1   2015-03-05

将列的默认值设置为

(CONVERT([date],getdate(),0))

我用过很多次

您的问题的答案很简单。将要保存值的列的格式更改为 DATE(与保存时间部分的数据类型相反,即:DATETIME)。

然后将默认值设置为 GETDATE(),因为目标列是 DATE,时间部分将被删除。

拿这个示例代码:

CREATE TABLE #temp (id INT, CreatedDate DATE DEFAULT GETDATE())

INSERT INTO #temp ( id)
VALUES ( 1 ),( 2 ),( 3 )

SELECT * FROM #temp

DROP TABLE #temp

输出:

id  CreatedDate
1   2015-03-05
2   2015-03-05
3   2015-03-05

以其他方式将 DATETIME 转换为 DATE(只获取没有时间的日期)您可以使用 CASTDATE 格式。

SELECT CAST(GETDATE() AS DATE)

在您的情况下,您可以设置默认值类型 DATE 而无需 CASTing。

CREATE TABLE #TempTable
(
   Id INT,
   ..... ,
   CurrentDate DATE DEFAULT GETDATE()
)

您可以使用 CONVERT() 获取不同格式的日期。来自 http://www.w3schools.com/sql/func_convert.asp :

CONVERT(VARCHAR(19),GETDATE())
CONVERT(VARCHAR(10),GETDATE(),10)
CONVERT(VARCHAR(10),GETDATE(),110)
CONVERT(VARCHAR(11),GETDATE(),6)
CONVERT(VARCHAR(11),GETDATE(),106)
CONVERT(VARCHAR(24),GETDATE(),113)

给出以下结果:

Nov 04 2011 11:45 PM
11-04-11
11-04-2011
04 Nov 11
04 Nov 2011
04 Nov 2011 11:45:34:243