2012-11-11 42 views
3

我正在使用SQL Server,我需要一個SQL查詢返回版本的年份。SQL查詢獲取sql年版本

我熟悉下一個方法:

select @@version 

select SERVERPROPERTY('productversion') 

,但我需要一個查詢將返回例如:

2008 

2005 

第一個查詢我提到需要髒解析,第二個返回一些產品編號。

有人知道這樣的查詢嗎?

謝謝!

+2

應爲2008 R2返回哪一年? –

+0

2008R2應該返回的年份是2008 – KernelMode

+1

我認爲它會以 之類的東西結束選擇Cast(SubString(@@ version,CharIndex('2',@@ Version),4)as int) – bummi

回答

10

試試這個 - 它只是檢查版本號的前兩個字符,並返回相應的「年」爲SQL Server版本。

SELECT 
    'SQL Server Year ' + 
    CASE SUBSTRING(CONVERT(VARCHAR(50), SERVERPROPERTY('productversion')), 1, 2) 
      WHEN '8.' THEN '2000' 
      WHEN '9.' THEN '2005' 
      WHEN '10' THEN '2008' 
      WHEN '11' THEN '2012' 
    END 

當然,你可以打包這件事到用戶定義函數,使其「更漂亮」

+0

謝謝。它看起來更清楚。 – KernelMode

1

由於財產SERVERPROPERTY('productversion')的第一個數字是主版本號:

major.minor.build.revision

然後你就可以創建一個包含每一個臨時表版本主要版本號及其年份。然後,你將結束與如下因素查詢:

DECLARE @productversion VARCHAR(100); 
SELECT @productversion = CAST(SERVERPROPERTY('productversion') AS VARCHAR(100)); 
SELECT years.year, years.name 
FROM 
(
    VALUES(9, '2005', 'SQL Server 2005'), 
     (10, '2008', 'SQL Server 2008 OR SQL Server 2008 R2'), 
     ... 
) AS years(majornumber, [year], name) 
WHERE years.majornumber = LEFT(@productversion, 
           CHARINDEX('.', @productversion , 1) - 1); 
+0

另外:8 = SQL Server 2000,11 = SQL Server 2012 –

+0

謝謝!我會用它。 你在哪裏找到主要版本和年度版本之間的匹配? – KernelMode

+0

@kernelMode - 我使用它。以下是[** SQL Server版本**](http://social.technet.microsoft.com/wiki/contents/articles/783.sql-server-versions.aspx)頁面。但請注意,你正在尋找前兩個數字,主要。 –

0
SELECT 'SQL Server ' + 
    CASE CAST(SERVERPROPERTY('productversion') AS CHAR(2)) 
      WHEN '8.' THEN '2000' 
      WHEN '9.' THEN '2005' 
      WHEN '10' THEN '2008/2008R2' 
      WHEN '11' THEN '2012' 
      WHEN '12' THEN '2014' 
      WHEN '13' THEN '2016' 
    END 

輸出 -

---------------------- 
SQL Server 2016