将 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
(只获取没有时间的日期)您可以使用 CAST
到 DATE
格式。
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
我正在尝试在 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
(只获取没有时间的日期)您可以使用 CAST
到 DATE
格式。
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