Как получить год в формате YY в SQL Server

select Year(Creation_Date) 
from Asset_Creation 
where Creation_Date = @Creation_Date

Я выполняю этот запрос, где я получаю год как 2013 при поставке сегодняшней даты. Я хочу, чтобы запрос вернул только 13 2013 года. Как я могу этого достичь?

7 ответов


попробовать

SELECT RIGHT(YEAR(Creation_Date), 2) YY 
  FROM Asset_Creation 
 WHERE ...

пример вывода:

| YY |
------
| 10 |
| 11 |
| 13 |

здесь SQLFiddle демо


для SQL Server 2012:

SELECT FORMAT(@Creation_Date, 'yy')

учитывая, что вы храните проблему 2100 года, используя только две цифры, я предполагаю, что вам нужен только код, который работает между 2000 и 2099 годами. В этом случае просто вычтите 2000:

select Year(Creation_Date) - 2000
from Asset_Creation 
where Creation_Date = @Creation_Date

select SUBSTRING(Year(Creation_Date), 2, 2)
from Asset_Creation 
where Creation_Date = @Creation_Date

Как насчет;

SUBSTRING(YEAR(Creation_Date), 3, 2)

вы можете использовать очень полезную функцию здесь

назовите это так

SELECT dbo.fnFormatDate (getdate(), ‘MM/DD/YY’) 

функции

CREATE FUNCTION dbo.fnFormatDate (@Datetime DATETIME, @FormatMask VARCHAR(32))
RETURNS VARCHAR(32)
AS
BEGIN
    DECLARE @StringDate VARCHAR(32)
    SET @StringDate = @FormatMask
    IF (CHARINDEX (‘YYYY’,@StringDate) > 0)
       SET @StringDate = REPLACE(@StringDate, ‘YYYY’,
                         DATENAME(YY, @Datetime))
    IF (CHARINDEX (‘YY’,@StringDate) > 0)
       SET @StringDate = REPLACE(@StringDate, ‘YY’,
                         RIGHT(DATENAME(YY, @Datetime),2))
    IF (CHARINDEX (‘Month’,@StringDate) > 0)
       SET @StringDate = REPLACE(@StringDate, ‘Month’,
                         DATENAME(MM, @Datetime))
    IF (CHARINDEX (‘MON’,@StringDate COLLATE SQL_Latin1_General_CP1_CS_AS)>0)
       SET @StringDate = REPLACE(@StringDate, ‘MON’,
                         LEFT(UPPER(DATENAME(MM, @Datetime)),3))
    IF (CHARINDEX (‘Mon’,@StringDate) > 0)
       SET @StringDate = REPLACE(@StringDate, ‘Mon’,
                                     LEFT(DATENAME(MM, @Datetime),3))
    IF (CHARINDEX (‘MM’,@StringDate) > 0)
       SET @StringDate = REPLACE(@StringDate, ‘MM’,
                  RIGHT(’0′+CONVERT(VARCHAR,DATEPART(MM, @Datetime)),2))
    IF (CHARINDEX (‘M’,@StringDate) > 0)
       SET @StringDate = REPLACE(@StringDate, ‘M’,
                         CONVERT(VARCHAR,DATEPART(MM, @Datetime)))
    IF (CHARINDEX (‘DD’,@StringDate) > 0)
       SET @StringDate = REPLACE(@StringDate, ‘DD’,
                         RIGHT(’0′+DATENAME(DD, @Datetime),2))
    IF (CHARINDEX (‘D’,@StringDate) > 0)
       SET @StringDate = REPLACE(@StringDate, ‘D’,
                                     DATENAME(DD, @Datetime))   
RETURN @StringDate
END
GO

фактически в SQLServer вы можете использовать аргумент format функции Convert, установленный в 1 синтаксис будет Convert(varchar (10), @YourDate, 1)