我想在INSERT SQL中执行此操作。谁能告诉我。
由于
- 标记
答案 0 :(得分:3)
答案 1 :(得分:2)
这样的事情应该有效:
insert into TableName(DateColumn)
select convert(datetime,getDate(),103)
答案 2 :(得分:1)
我不确定我是完全遵循的,但是如果您正在使用{dd / mm / yy'形式的datetime
并尝试将其变为varchar(10)
形式yyyy-dd-mm
然后我认为您需要转换为varchar,然后使用SUBSTRING
,LEFT
和RIGHT
来提取您需要的数据:
declare @dt datetime
select @dt = getdate() -- i.e. 04/09/2009
declare @str varchar(8)
select @str = convert(varchar(8),@dt,112) --gives 20090904
select LEFT(@str,4) + '-' + RIGHT(@str,2) + '-' + SUBSTRING(@str,5,2) -- gives 2009-04-09
它不漂亮,但它有效!
答案 3 :(得分:0)
从http://anubhavg.wordpress.com/2009/06/11/how-to-format-datetime-date-in-sql-server-2005/
查看此自定义日期格式设置功能这允许您以任何方式格式化日期。但是我不确定为什么你想要YYYY-DD-MM
格式的日期,因为这是非标准的。
————
– SQL datetime functions
– SQL Server date formats
– T-SQL convert dates
– Formatting dates sql server
CREATE FUNCTION dbo.fnFormatDate (@Datetime DATETIME, @FormatMask VARCHAR(32))
RETURNS VARCHAR(32)
AS
BEGIN
DECLARE @StringDate VARCHAR(32)
SET @StringDate = @FormatMask
IF (CHARINDEX ('YYYY',@StringDate) > 0)
SET @StringDate = REPLACE(@StringDate, 'YYYY',
DATENAME(YY, @Datetime))
IF (CHARINDEX ('YY',@StringDate) > 0)
SET @StringDate = REPLACE(@StringDate, 'YY',
RIGHT(DATENAME(YY, @Datetime),2))
IF (CHARINDEX ('Month',@StringDate) > 0)
SET @StringDate = REPLACE(@StringDate, 'Month',
DATENAME(MM, @Datetime))
IF (CHARINDEX ('MON',@StringDate COLLATE SQL_Latin1_General_CP1_CS_AS)>0)
SET @StringDate = REPLACE(@StringDate, 'MON',
LEFT(UPPER(DATENAME(MM, @Datetime)),3))
IF (CHARINDEX ('Mon',@StringDate) > 0)
SET @StringDate = REPLACE(@StringDate, 'Mon',
LEFT(DATENAME(MM, @Datetime),3))
IF (CHARINDEX ('MM',@StringDate) > 0)
SET @StringDate = REPLACE(@StringDate, 'MM',
RIGHT('0'+CONVERT(VARCHAR,DATEPART(MM, @Datetime)),2))
IF (CHARINDEX ('M',@StringDate) > 0)
SET @StringDate = REPLACE(@StringDate, 'M',
CONVERT(VARCHAR,DATEPART(MM, @Datetime)))
IF (CHARINDEX ('DD',@StringDate) > 0)
SET @StringDate = REPLACE(@StringDate, 'DD',
RIGHT('0'+DATENAME(DD, @Datetime),2))
IF (CHARINDEX ('D',@StringDate) > 0)
SET @StringDate = REPLACE(@StringDate, 'D',
DATENAME(DD, @Datetime))
RETURN @StringDate
END
然后你可以这样称呼:
SELECT dbo.fnFormatDate (getdate(), 'YYYY-DD-MM')
答案 4 :(得分:0)
我们不知道YY
中的DD/MM/YY
是在当前世纪还是上个世纪。例如,如果YY
为15
,我们不知道这是1915
还是2015
。所以0到15之间的数字将被视为当前世纪。如果当前年份是2016年,则0到16之间的数字将被视为当前世纪(其动态)。
示例强>
YY
为15
时,YYYY
将为2015
。YY
为97
时,YYYY
将为1997
。<强> QUERY 强>
DECLARE @DATECOL VARCHAR(13) = '25/01/15'
SELECT CASE WHEN RIGHT(@DATECOL,2) BETWEEN 0 AND CAST(RIGHT(YEAR(GETDATE()),2)AS INT)
THEN '20' + RIGHT(@DATECOL,2) ELSE '19' + RIGHT(@DATECOL,2) END
+ '-' + LEFT(@DATECOL,2) + '-' + LEFT(RIGHT(@DATECOL,5),2)