如何確定SQL Server欄中的最大值

來源:互聯網
上載者:User

   如何確定SQL Server欄中的最大值

  CREATE TABLE [dbo].[MinMax](

  [MinMaxID] [int] IDENTITY(1,1) NOT NULL,

  [Value1] [int] NULL,

  [Value2] [int] NULL,

  [Value3] [int] NULL,

  [Value4] [int] NULL,

  CONSTRAINT [PK_MinMax]PRIMARY KEY CLUSTERED

  (

  [MinMaxID] ASC

  )WITH (PAD_INDEX= OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

  ) ON [PRIMARY]

  注意,表定義允許在它的四個列中使用NULL值。在大多數情況下,我會盡量應用非NULL列,但在這種情況下,一個或幾個日期列中很有可能包含NULL值;我當然不希望僅僅為了逃避非NULL問題而輸入錯誤的資料。於是我把所有日期列定義為NULL列。圖1給出了一些你可以插入表中的樣本值。

  對於簡單Min()和Max()函數的作用,SQL有它自己的規定,即比較一個列中的值。既然沒有內建函數來比較任何兩個值並確定最大或最小值,你應該自行編寫這種函數。我決定把它們叫做Min2()和Max2()。見列表A。

  你可以用這個代碼對它們進行測試:

  SELECT dbo.Min2( 23, 34 )

  SELECT dbo.Max2( 23,NULL)

  SELECT dbo.Min2( NULL, 34 )

  SELECT dbo.Max2( 23,NULL)

  要比較原始表中的值,你可以簡單地嵌入函數調用,就像這樣:

  SELECT dbo.Max2( Value1, dbo.Max2( Value2, dbo.Max2( Value3, Value4 ) ) )

  FROM dbo.MinMax

  根據原始表,這個調用的結果如下:

  7

  10

  27

  81

  還是有一個問題:上面的代碼把NULL轉換成0。在Min2()函數中,這意味著如果有自變數為NULL值,則返回結果為0。在多數情況下,我認為這樣做是恰當的,但在一些特殊情況下,你可能希望返回NULL而不是0。

  你可能已經編寫了一個剛好只接受四個參數的函數,但這樣的函數過於特殊,不能在其它情況下使用。花一點時間考慮更普遍的情況,你將會得到更加有用的函數。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.