시간 데이터 유형을 AMPM 형식으로 변환:
"시작 시간" 및 "종료 시간"과 같은 두 개의 필드가 있는 테이블이 하나 있습니다.두 열의 데이터 유형은 시간입니다.
표의 값은 다음과 같습니다.
TableA:
StartTime EndTime
------------------ ----------------
17:30:00.0000000 17:57:00.0000000
하지만 나는 그 결과가 필요합니다.
StartTime EndTime
------------------ ----------------
05:30 PM 05:57 PM
내가 테이블을 선택할 때.AMPM 형식으로 시간을 얻는 방법은 무엇입니까?
SQL 2012에서는 Format() 함수를 사용할 수 있습니다.
https://technet.microsoft.com/en-us/library/hh213505%28v=sql.110%29.aspx
열 유형이 (날짜 시간)인 경우 주물을 건너뜁니다.
예:
SELECT FORMAT(StartTime,'hh:mm tt') AS StartTime
FROM TableA
다음 구문을 사용하여 시간을 AMPM 형식으로 변환합니다.
필드 이름을 다음 쿼리의 값으로 바꿉니다.
select CONVERT(varchar(15),CAST('17:30:00.0000000' AS TIME),100)
출력: 오후 5시 30분
Sql 2012에서는 더 나은 옵션을 사용할 수 있습니다.첫 번째 매개 변수는 날짜/시간 데이터 형식이어야 합니다.
DECLARE @d DATETIME = '10/01/2011 13:14';
SELECT FORMAT(@d,'hh:mm tt')
출력 : 01:14 PM
다음은 필요에 따라 다양한 방법으로 이 작업을 수행할 수 있습니다.
시간 데이터 유형 사용:
DECLARE @Time Time = '15:04:46.217'
SELECT --'3:04PM'
CONVERT(VarChar(7), @Time, 0),
--' 3:04PM' --Leading Space.
RIGHT(' ' + CONVERT(VarChar(7), @Time, 0), 7),
--' 3:04 PM' --Space before AM/PM.
STUFF(RIGHT(' ' + CONVERT(VarChar(7), @Time, 0), 7), 6, 0, ' '),
--'03:04 PM' --Leading Zero. This answers the question above.
STUFF(RIGHT('0' + CONVERT(VarChar(7), @Time, 0), 7), 6, 0, ' ')
--'03:04 PM' --This only works in SQL Server 2012 and above. :)
,FORMAT(CAST(@Time as DateTime), 'hh:mm tt')--Comment out for SS08 or less.
DateTime 데이터 유형 사용:
DECLARE @Date DateTime = '2016-03-17 15:04:46.217'
SELECT --' 3:04PM' --No space before AM/PM.
RIGHT(CONVERT(VarChar(19), @Date, 0), 7),
--' 3:04 PM' --Space before AM/PM.
STUFF(RIGHT(CONVERT(VarChar(19), @Date, 0), 7), 6, 0, ' '),
--'3:04 PM' --No Leading Space.
LTRIM(STUFF(RIGHT(CONVERT(VarChar(19), @Date, 0), 7), 6, 0, ' ')),
--'03:04 PM' --Leading Zero.
STUFF(REPLACE(RIGHT(CONVERT(VarChar(19), @Date, 0), 7), ' ', '0'), 6, 0, ' ')
--'03:04 PM' --This only works in SQL Server 2012 and above. :)
,FORMAT(@Date, 'hh:mm tt')--Comment line out for SS08 or less.
11:30 AM으로 돌아옵니다.
select CONVERT(VARCHAR(5), FromTime, 108) + ' ' + RIGHT(CONVERT(VARCHAR(30), FromTime, 9),2)
from tablename
SELECT CONVERT(varchar, StartTime, 100) AS ST,
CONVERT(varchar, EndTime, 100) AS ET
FROM some_table
또는
SELECT RIGHT('0'+ LTRIM(RIGHT(CONVERT(varchar, StartTime, 100),8)),8) AS ST,
RIGHT('0'+ LTRIM(RIGHT(CONVERT(varchar, EndTime, 100),8)),8) AS ET
FROM some_table
> SELECT CONVERT(VARCHAR(30), GETDATE(), 100) as date_n_time
> SELECT CONVERT(VARCHAR(20),convert(time,GETDATE()),100) as req_time
> select convert(varchar(20),GETDATE(),103)+' '+convert(varchar(20),convert(time,getdate()),100)
> Result (1):- Jun 9 2018 11:36AM
> result(2):- 11:35AM
> Result (3):- 06/10/2018 11:22AM
CONVERT(varchar(15), CAST('17:30:00.0000000' AS TIME), 100)을 선택합니다.
공간 문제를 제외하면 거의 완벽하게 작동합니다.다음으로 변경된 경우:
select CONVERT(varchar(15),CAST('17:30:00.0000000' AS TIME),22)
...그러면 공간을 확보할 수 있습니다.또한 변환 중인 열이 이미 다음과 같은 경우TIME
포맷을 직접 참조하면 캐스트를 건너뛸 수 있습니다.
최종 답변:
select CONVERT(varchar(15),StartTime,22)
다양한 기능을 제공하지만 필요한 기능을 제공합니다(SQL Server 2008에서 테스트됨).
편집: 다음 작업은 에 대해서만 수행되는 것이 아닙니다.time
유형, 하지만 당분간datetime
뿐만 아니라.
SELECT SUBSTRING(CONVERT(varchar(20),StartTime,22), 10, 11) AS Start, SUBSTRING(CONVERT(varchar(20),EndTime,22), 10, 11) AS End FROM [TableA];
사용해 보십시오.
select CONVERT(VARCHAR(5), ' 4:07PM', 108) + ' ' + RIGHT(CONVERT(VARCHAR(30), ' 4:07PM', 9),2) as ConvertedTime
DECLARE @temp varchar(50)
set @temp = convert(varchar(max),STUFF(STUFF('645P',2,0,':'),5,0,' '))
select @temp
SELECT CASE
WHEN RIGHT(@temp,1)='P' THEN REPLACE(@temp,'p','PM')
WHEN RIGHT(@temp,1)='A' THEN REPLACE(@temp,'a','AM')
END
사용해 보십시오.
select CONVERT(varchar(15),CAST('2014-05-28 16:07:54.647' AS TIME),100) as CreatedTime
select right(convert(varchar(20),getdate(),100),7)
두 번째 옵션인 위의 @Saikh의 답변을 사용하여 시간 자체와 AM 또는 PM 사이에 공백을 추가할 수 있습니다.
REVERSE(LEFT(REVERSE(CONVERT(VARCHAR(20),CONVERT(TIME,myDateTime),100)),2) + ' ' + SUBSTRING(REVERSE(CONVERT(VARCHAR(20),CONVERT(TIME,myDateTime),100)),3,20)) AS [Time],
지저분하다는 건 알지만 그게 제가 선택한 해결책입니다.CONVERT()가 해당 공간을 자동으로 추가하지 않는 것이 이상합니다. SQL Server 2008 R2
한 가지 옵션은 다음을 사용하는 것은FORMAT()
다음과 같은 기능:
-- Returns "03:15 AM"
DECLARE @iniTme TIME = '03:15:30'
SELECT FORMAT(CAST(@iniTme AS DATETIME), 'hh:mm tt')
-- Returns "03:15 PM"
DECLARE @endTme TIME = '15:15:30'
SELECT FORMAT(CAST(@endTme AS DATETIME), 'hh:mm tt')
아래 코드는 왜 아무도 언급하지 않았는지 궁금합니다.
select FORMAT(CAST(@Your_time_data_type AS datetime),'hh:mm tt') AS TimeStr
예를 들면select FORMAT(CAST('12:30' AS datetime),'hh:mm tt') AS TimeIn
SELECT CONVERT(VARCHAR(20),GETDATE(),106)+' '+CONVERT(VARCHAR(20),CONVERT(TIME,GETDATE()),100)
-> 결과:30 Jan 2023 3:02PM
언급URL : https://stackoverflow.com/questions/10828492/convert-time-datatype-into-am-pm-format
'programing' 카테고리의 다른 글
세션과 HttpContext 간의 차이입니다.현재의.세션 (0) | 2023.07.15 |
---|---|
SQL Server에서 동일해야 하는 두 쿼리의 결과를 비교합니다. (0) | 2023.07.15 |
알려진 상위 패키지가 없는 상대 가져오기 시도 (0) | 2023.07.15 |
ggplot2에서 x 및 y 축 레이블 추가 (0) | 2023.07.15 |
Oracle: where 절에서 날짜 및 시간별로 필터링하는 방법 (0) | 2023.07.15 |