Sql server SQL server中的日期格式和有效性
我正在尝试在SQL server上编写代码,以获取日期的第一个格式,然后将其转换为dd/mm/yy格式。之后,我还需要检查日期是否有效,特别是在诸如2015年7月6日之类的情况下。我如何知道该文件的格式(如果是6月7日或7月6日),并将其转换为dd/mm/yy。我还需要检查年份是否有效,这意味着日期应该小于当前年份。包括2月的日期不得大于28,除非是闰年。你能帮我改进代码吗?非常感谢你Sql server SQL server中的日期格式和有效性,sql-server,date,Sql Server,Date,我正在尝试在SQL server上编写代码,以获取日期的第一个格式,然后将其转换为dd/mm/yy格式。之后,我还需要检查日期是否有效,特别是在诸如2015年7月6日之类的情况下。我如何知道该文件的格式(如果是6月7日或7月6日),并将其转换为dd/mm/yy。我还需要检查年份是否有效,这意味着日期应该小于当前年份。包括2月的日期不得大于28,除非是闰年。你能帮我改进代码吗?非常感谢你 set language 'us_english' SET DATEFORMAT
set language 'us_english'
SET DATEFORMAT dmy
CREATE TABLE [sample].[dbo].[EY_LFA111](
[MANDT] [nvarchar] (255) NULL,
[LIFNR] [nvarchar] (255) NULL,
[ERDAT] [date] NULL,
[ERNAM] [nvarchar] (255) NULL,
[MENGE] [float] NULL,
[WKURS] [decimal] (30,15) NULL,
[CPUTM] [time] NULL
)
insert into [sample].[dbo].[EY_LFA111](
[MANDT],
[LIFNR],
[ERDAT],
[ERNAM],
[MENGE],
[WKURS],
[CPUTM]
)
select
LTRIM(RTRIM([MANDT])),
LTRIM(RTRIM([LIFNR])),
case
when ISDATE(LTRIM(RTRIM([ERDAT]))) = 1
AND ERDAT LIKE '[0-3][0-9].[0-1][0-9].[1-2][0-9][0-9][0-9]'
then LTRIM(RTRIM(CONVERT(date,[ERDAT], 103)))
else NULL end,
LTRIM(RTRIM([ERNAM])),
LTRIM(RTRIM(CONVERT(float,[MENGE]))),
LTRIM(RTRIM(CONVERT(decimal(30,15),[WKURS]))),
case when ISDATE(LTRIM(RTRIM([CPUTM]))) = 1
then LTRIM(RTRIM(CONVERT(time,[CPUTM], 108)))
else NULL end
from [sample].[dbo].[EY_Formatted$]
试试这个。许多不必要的代码被删除,验证也得到了改进。这个答案在sqlserver-2012中适用+
INSERT [sample].[dbo].[EY_LFA111](
[MANDT],
[LIFNR],
[ERDAT],
[ERNAM],
[MENGE],
[WKURS],
[CPUTM])
SELECT
LTRIM(RTRIM([MANDT])),
LTRIM(RTRIM([LIFNR])),
CASE WHEN TRY_CONVERT(date, [ERDAT], 103) < GETDATE()
THEN CONVERT(date,[ERDAT], 103)
ELSE NULL end,
LTRIM(RTRIM([ERNAM])),
TRY_CONVERT(float,[MENGE]),
TRY_CONVERT(decimal(30,15),[WKURS])),
TRY_CONVERT(time, [CPUTM])
FROM [sample].[dbo].[EY_Formatted$]
插入[sample].[dbo].[EY_LFA111](
[MANDT],
[LIFNR],
[ERDAT],
[ERNAM],
[梦歌],,
[WKURS],
[CPUTM])
挑选
LTRIM(RTRIM([MANDT]),
LTRIM(RTRIM([LIFNR]),
尝试转换时的大小写(日期,[ERDAT],103)
如果您使用的是SQL Server 2012或更高版本,请尝试解析可能会对您有所帮助。我使用的是SQLServer2008RTM,代码不起作用。TRY\u CONVERT甚至不能识别为内置函数名。请问有什么帮助吗?嗨,t-clausen.dk。我使用的是SQLServer2008RTM,代码不起作用。TRY\u CONVERT甚至不能识别为内置函数名。请问有什么需要帮忙的吗?