Добавить 0 в начале в SQL - PullRequest
0 голосов
/ 21 декабря 2011

у меня столик

Create Table TestDates
(
  TestDateId int identity (1,1),
  RunDateTime DateTime
)

Мне удается выполнить отдельный запрос, который приносит только время, но если час или минута меньше 10, я хочу добавить ноль

SELECT DISTINCT SUBSTRING(CONVERT(varchar, RunDateTime, 100), 13, 2) + ':'
+ SUBSTRING(CONVERT(varchar, RunDateTime, 100), 16, 2) + ' '
+ SUBSTRING(CONVERT(varchar, RunDateTime, 100), 18, 2) AS DistinctDate
from TestDates

См. Пример

**Current Output     Desired Output**

8:1 PM               **08:01 PM** 
8:33 AM              **08:33 AM**

Я пытался использовать правильную функцию, но она не помогает

SELECT DISTINCT Right('00' + SUBSTRING(CONVERT(varchar, RunDateTime, 100), 13, 2),2) + ':'
+ Right('00' + SUBSTRING(CONVERT(varchar, RunDateTime, 100), 16, 2),2) + ' '
+ SUBSTRING(CONVERT(varchar, RunDateTime, 100), 18, 2) AS DistinctDate
from TestDates

Пожалуйста, совет

Ответы [ 3 ]

1 голос
/ 21 декабря 2011

Попробуйте:

SELECT DISTINCT 
     Right('00'+LTRIM(SUBSTRING(CONVERT(varchar, RunDateTime, 100), 13, 2)),2) + 
     ':'
     + Right('00' + SUBSTRING(CONVERT(varchar, RunDateTime, 100), 16, 2),2) + ' '
     + SUBSTRING(CONVERT(varchar, RunDateTime, 100), 18, 2) AS DistinctDate
FROM TestDates

Проблема в том, что первая подстрока возвращает _8 (пробел 8), поэтому вам нужно обрезать значение, чтобы избавиться от пробела, а затем добавить код 00.

1 голос
/ 21 декабря 2011
SELECT Replace(SUBSTRING(CONVERT(varchar(100), RunDateTime,131), 12, 5), ' ', '0') 
  + ' ' 
  + SUBSTRING(CONVERT(varchar(100), RunDateTime,131), 24, 2)
from TestDates
1 голос
/ 21 декабря 2011

Создайте эту функцию и оберните любое поле даты и времени, к которому вы хотите применить ее.Пример использования:

SELECT TestDateId,dbo.ProperHours(RunDateTime) FROM TestDates


CREATE FUNCTION dbo.ProperHours(
    @Time DATETIME
)
RETURNS CHAR(8)
AS
BEGIN
    DECLARE @Hours TINYINT
    DECLARE @Minutes TINYINT
    DECLARE @HoursAsString CHAR(2)
    DECLARE @MinutesAsString CHAR(2)
    DECLARE @AmPm CHAR(2)

    SELECT  @Hours=DATEPART(hh,@Time),
            @Minutes=DATEPART(n,@Time),
            @AmPm=CASE
                    WHEN DATEPART(hh,@Time)>=12 THEN 'PM'
                    ELSE 'AM'
                END

    IF @Hours>12
        BEGIN
            SET @Hours=@Hours-12
        END
    ELSE IF @Hours=0
        BEGIN
            SET @Hours=12
        END

    SELECT  @HoursAsString=CONVERT(VARCHAR,@Hours),
            @MinutesAsString=CONVERT(VARCHAR,@Minutes)

    IF LEN(@HoursAsString)=1
        BEGIN
            SET @HoursAsString = '0' + @HoursAsString
        END

    IF LEN(@MinutesAsString)=1
        BEGIN
            SET @MinutesAsString = '0' + @MinutesAsString
        END

    RETURN @HoursAsString + ':' + @MinutesAsString + ' ' + @AmPm
END
GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...