一般情况之下,存储日期至数据库中,不必在意它的显示格式,只要是日期即可,在程序中显法时,才会去控制它的显示格式。
但是,当你是开发SQL程序,你要求不了前台程序员按照你的想法去做,把日期显示某种格式,他们只管调用你的存储过程。解决这样的问题,我们把SQL输出结果就控制为最终结果,有关这方面企业内网程式应用较多。
你可以参考下面SQL自定义函数,需要的地方调用即可。
View Code
CREATE
FUNCTION
[
dbo
]
.
[
ConvertDate
]
(
@InputDate DATETIME , -- 输入日期,或是原格式日期
@DateFormat NVARCHAR ( 10 ) -- 日期显示格式
)
RETURNS NVARCHAR ( 10 )
AS
BEGIN
DECLARE @DtFormat NVARCHAR ( 10 ) = @DateFormat
IF CHARINDEX ( ' YYYY ' , @DtFormat ) > 0
SET @DtFormat = REPLACE ( @DtFormat , ' YYYY ' , STR ( YEAR ( @InputDate ), 4 ))
ELSE
IF CHARINDEX ( ' YY ' , @DtFormat ) > 0
SET @DtFormat = REPLACE ( @DtFormat , ' YY ' , SUBSTRING ( STR ( YEAR ( @InputDate ), 4 ), 3 , 2 ))
IF CHARINDEX ( ' MM ' , @DtFormat ) > 0
SET @DtFormat = REPLACE ( @DtFormat , ' MM ' , STR ( MONTH ( @InputDate ), 2 ))
IF CHARINDEX ( ' DD ' , @DtFormat ) > 0
SET @DtFormat = REPLACE ( @DtFormat , ' DD ' , STR ( DAY ( @InputDate ), 2 ))
SET @DtFormat = REPLACE ( @DtFormat , ' ' , ' 0 ' )
RETURN @DtFormat
END
(
@InputDate DATETIME , -- 输入日期,或是原格式日期
@DateFormat NVARCHAR ( 10 ) -- 日期显示格式
)
RETURNS NVARCHAR ( 10 )
AS
BEGIN
DECLARE @DtFormat NVARCHAR ( 10 ) = @DateFormat
IF CHARINDEX ( ' YYYY ' , @DtFormat ) > 0
SET @DtFormat = REPLACE ( @DtFormat , ' YYYY ' , STR ( YEAR ( @InputDate ), 4 ))
ELSE
IF CHARINDEX ( ' YY ' , @DtFormat ) > 0
SET @DtFormat = REPLACE ( @DtFormat , ' YY ' , SUBSTRING ( STR ( YEAR ( @InputDate ), 4 ), 3 , 2 ))
IF CHARINDEX ( ' MM ' , @DtFormat ) > 0
SET @DtFormat = REPLACE ( @DtFormat , ' MM ' , STR ( MONTH ( @InputDate ), 2 ))
IF CHARINDEX ( ' DD ' , @DtFormat ) > 0
SET @DtFormat = REPLACE ( @DtFormat , ' DD ' , STR ( DAY ( @InputDate ), 2 ))
SET @DtFormat = REPLACE ( @DtFormat , ' ' , ' 0 ' )
RETURN @DtFormat
END
实例操作,调用函数:
SELECT
[
dbo
]
.
[
ConvertDate
]
(
'
2011/06/30
'
,
'
MM/dd/yyyy
'
)
执行结果: