формат даты не соответствует ожидаемому - PullRequest
0 голосов
/ 29 февраля 2012

У меня есть следующая функция ниже.

Возвращает дату, например 29 февраля 2012 г., 22:00. Есть ли способ заставить его вернуть формат как 29.02.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

Ответы [ 3 ]

2 голосов
/ 29 февраля 2012

Функция сама возвращает дату и время, «29 февраля 2012 г. 22:00» и «29.02.2012 г. 10:00» являются просто строковыми представлениями этой даты (я предполагаю, что переключатели AM и PM не имеют отношения к вопросу и являются просто ошибкой). Если вы хотите отформатировать дату как конкретную строку, посмотрите на функцию CONVERT . например:

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 голос
/ 29 февраля 2012

просто измените \ добавьте это:

SET @Result = DATEADD(HH, 5, @inputDate)
SET @Result = CONVERT(VARCHAR(10), @Result , 101) + ' ' + RIGHT(CONVERT(VARCHAR, GETDATE(), 100), 7)

Вы можете сделать это в одну строку, конечно, просто сделали для 2 для ясности

забыл добавить, что вам нужно изменитьвернуть переменную в varchar вместо datetime.Если вы не можете этого сделать, возможно, вы можете добавить преобразование в те места, где вызывается функция (что наверняка будет наихудшим)

1 голос
/ 29 февраля 2012

Если вы хотите отформатировать DateTime, вам нужно будет вернуть его как VARCHAR, а не как дату.Если вы объявляете FUNCTION для возврата DateTime, тогда он всегда будет возвращать DateTime, отформатированный стандартным способом SQL.

Вы можете вернуть его в виде строки, используя функцию sql CONVERT:

RETURN CONVERT(varchar(500), @Result, 101)

Список форматов можно найти на MSDN .Если вам нужен другой формат, вам нужно сделать что-то вроде того, что обсуждалось в этом вопросе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...