我在下面有以下功能。
返回2012年2月29日10:00 PM之类的日期。有没有办法让它返回格式为2/29/2012 10:00 PM
CREATE FUNCTION scrubDateString
(
-- Add the parameters for the function here
@inputDate varchar(150)
)
RETURNS DATETIME
AS
BEGIN
-- Declare the return variable here
DECLARE @Result DATETIME
-- Add the T-SQL statements to compute the return value here
DECLARE @tmpDate datetime
SET @Result = null
IF (ISDATE(@inputDate)=1)
BEGIN
SET @Result = DATEADD(HH, 5, @inputDate)
END
-- Return the result of the function
RETURN @Result
END
答案 0 :(得分:2)
函数本身返回日期和时间,“2012年2月29日10:00 PM”和“2/29/2012 10:00 AM”仅仅是该日期的字符串表示(我假设AM和PM开关是与问题无关,只是一个错误)。如果要将日期格式化为特定字符串,请查看CONVERT函数。 e.g:
DECLARE @Date DATETIME
SET @Date = scrubDateString(@YourString)
SELECT CONVERT(VARCHAR, @Date, 101) + ' ' + RIGHT(CONVERT(VARCHAR, @Date, 0), 7) [Date]
虽然我强烈建议您将日期保留为日期,并尽可能在应用程序端进行任何格式化。如果我对AM PM开关有错误,你可以将上面的代码改为:
DECLARE @Date DATETIME
SET @Date = scrubDateString(@YourString)
IF (DATEPART(HOUR, @Date) > 12)
BEGIN
SET @Date = DATEADD(HOUR, -12, @Date)
END
SELECT CONVERT(VARCHAR, @Date, 101) + ' ' + RIGHT(CONVERT(VARCHAR, @Date, 0), 7) [Date]
答案 1 :(得分:1)
如果要格式化DateTime,则需要将其作为VARCHAR而不是日期返回。如果声明一个FUNCTION返回DateTime,那么它将始终返回以标准SQL方式格式化的DateTime。
您可以使用sql CONVERT函数将其作为字符串返回:
RETURN CONVERT(varchar(500), @Result, 101)
可以找到格式列表on msdn。如果您想要不同的格式,那么您需要执行this question
中讨论的内容答案 2 :(得分:1)
只需更改\添加此内容:
SET @Result = DATEADD(HH, 5, @inputDate)
SET @Result = CONVERT(VARCHAR(10), @Result , 101) + ' ' + RIGHT(CONVERT(VARCHAR, GETDATE(), 100), 7)
你可以在一行上制作它,当然,为了清晰起见,只做了2次
忘了添加你需要将return变量更改为varchar而不是datetime。 如果你不能这样做,也许你可以将转换添加到调用函数的地方(这肯定是最糟糕的)