當前位置:首頁 » 編程語言 » sql常量函數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql常量函數

發布時間: 2023-02-19 05:34:05

sql常量是什麼變數是什麼局量是什麼

常量就是定值,不會變動的值,如1,2,'a','abc'
變數通常指局部變數,僅當前會話有效,以@符號開頭的,可以存儲不同值的一種佔位符
如declare @a int set @a=1 定義變數@a為int類型,並賦值為1
局量說的應該是全局變數了吧,通常是以@@開頭的一些系統變數
如@@version顯示資料庫及操作系統的版本信息

Ⅱ sql語句中count(0)和count(1)的區別

一、意思不同

count(1)會統計包括null值的所有符合條件的欄位的條數。count(0)將返回表格中所有存在的行的總數包括值為null的行,然而count(列名)將返回表格中除去null以外的所有行的總數(有默認值的列也會被計入),distinct 列名,得到的結果將是除去值為null和重復數據後的結果 。

二、作用不同

主要還是要count(1)所相對應的數據欄位。

如果count(1)是聚索引,id,那肯定是count(1)快。但是差的很小的。 因為count(*),自動會優化指定到那一個欄位。所以沒必要去count(?),用count(*),sql會幫你完成優化的 。

三、使用結果不同

當abc為空的時候,第二種不算入count中,而第一種是無條件的都算入count中,比例一列數據

欄位名叫abc

A

B

NULL

這樣的話,第一種查詢是3條,而第二種查詢的結果是2條。

Ⅲ sql如何將一個查詢變成常量

基本的查詢語句為select ID,name from TableA
select ID,name,新增的列名=(可以上查詢語句) from TableA
將你所需要設置的常量放在新增的列名上即可
QL Server查詢結果集中的常量通常不作為單獨的列在結果集中指定,下面就讓我們了解一下SQL Server查詢結果集中的常量處理問題。
SQL Server查詢結果集中的常量
常量通常不作為單獨的列在結果集中指定。對於應用程序本身而言,與要求伺服器將常量值合並到跨網路返回的每一個結果集的行中相比,在顯示結果時將常量值內置於結果中更為有效。

Ⅳ SQL - find_in_set()函數的使用

一、MySQL手冊中find_in_set函數的語法:

FIND_IN_SET(str,strlist)

str 要查詢的字元串

strlist 欄位名 參數以」,」分隔 如 (1,2,6,8)

查詢欄位(strlist)中包含(str)的結果,返回結果為null或記錄

例子:

mysql> SELECT FIND_IN_SET('b', 'a,b,c,d'); 

-> 2 因為b 在strlist集合中放在2的位置 從1開始

二、常見用法

1、find_in_set() 和 in 的區別:

FIND_IN_SET(str,strlist) 

strlist是常量,則可以直接用IN

例子

select * from user where user_id in (1,2,3); ----可以用IN

select * from user where user_id in (list); ---不可用,返回為空。list為一個變數

select * from user where user_id  find_in_set('1',list);-- 可用,正確返回

2、find_in_set() 和 like的區別:

like是廣泛的模糊匹配,字元串中沒有分隔符,Find_IN_SET 是精確匹配,欄位值以英文」,」分隔

例子:

SELECT * FROM users WHERE limits LIKE '%2%';

SELECT * FROM users WHERE FIND_IN_SET(2,limits);

Ⅳ sql什麼是常量變數局量

常量就是數值固定不變的或者被賦予固定值的量,如數字'100'、字母'abc'、符號'<>?/-'等。
變數即數值會發生變化的量,變數分為全局變數和局部變數。
局部變數(Local Variable)是用戶可以定義的、作用范圍僅在程序內部的變數。通常情況下,局部變數在程序中被用來存儲查詢結果,或者被當作程序執行過程中的暫存變數來使用。局部變數定義時要以@開頭,定義方式為:Declare @變數名 變數類型。
全局變數(Global Variable)是MS SQLServer系統內部使用的變數,作用范圍是系統內的所有程序,而並非局限於某些程序。它不是由用戶來定義的,而是系統中預先定義好的。使用全局變數時,要以@@開頭,如:select@@VERSION as w 用來查詢SQL伺服器安裝的日期、版本和處理器類型;select@@CONNECTIONS 用來查詢自上次SQL啟動以來連接或試圖連接的次數。
關於局部變數和全局變數詳細定義及用法,下面庫友的文章寫得很棒,請參考:
http://wenku..com/link?url=IQm3AQbS1RMtt1mFljtgdLeUSQC9_-V2c8epZTtRu-QdyQ86Gxh1CP6YfzXw_eCaRYLlysaI-vbu

http://wenku..com/view/f4d6faeeaeaad1f346933f00.html

Ⅵ 求sql語句。得出表中兩列相減的值

1、語句如下:

select A, B, A-B as C from 表1

2、計算列:

可以使用同一表中的其他列的表達式計算得來。表達式可以是非計算列的列名、常量、函數,也可以是用一個或多個運算符連接的上述元素的任意組合。表達式不能為子查詢。

語句中的A-B就是計算列,as C的意思是給這個計算列起個列名叫C。

只要符合上述規則,你可以任意組合欄位、運算符等,形成需要的計算列。

(6)sql常量函數擴展閱讀:

計算列應用范圍

計算列可用於選擇列表、WHERE 子句、ORDER BY 子句或任何可使用正則表達式的其他位置,但下列情況除外:

用作 CHECK、FOREIGN KEY 或 NOT NULL 約束的計算列必須標記為 PERSISTED。如果計算列的值由具有確定性的表達式定義,並且索引列中允許使用計算結果的數據類型,則可將該列用作索引中的鍵列,或者用作 PRIMARY KEY 或 UNIQUE 約束的一部分。

例如,如果表中含有整數列a和b,則可以對計算列a+b創建索引,但不能對計算列a+ DATEPART(dd,GETDATE()) 創建索引,因為在後續調用中,其值可能發生改變。

計算列不能作為 INSERT 或 UPDATE 語句的目標。

資料庫引擎基於使用的表達式自動確定計算列的為 Null 性。即使只有非空列,大多數表達式的結果也「認為」可為空值,因為下溢或溢出生成的結果也可能為空。使用帶AllowsNull屬性的 COLUMNPROPERTY 函數可查明表中任何計算列的為 Null 性。通過指定 ISNULL (check_expression,constant) 可以將可為空值的表達式轉換為不可為空值的表達式,其中,constant是可替換所有空結果的非空值.

網路.計算列

Ⅶ sql 存儲過程使用定義的常量

DECLARE@aINT
SET@a=1

while@a<=@nCOUNT
begin
selecttop1*from
(SELECTTOP(@a)*=@HuoDongId)asa
orderbya.nRoundDESC

set@a=@a+1
end

Ⅷ 講解SQL Server資料庫中函數的使用方法

本文主要主要講解了SQL Server資料庫中函數的兩種用法 具體內容請參考下文

◆ 由於update里不能用存儲過程 並且由於根據更新表的某些欄位還要進行計算 所以很多人採用的是游標的方法 在這里我們可以用函數的方法實現

函數部分

CREATE FUNCTION [DBO] [FUN_GETTIME] (@TASKPHASEID INT)RETURNS FLOAT ASBEGINDECLARE @TASKID INT @HOUR FLOAT @PERCENT FLOAT @RETURN FLOATIF @TASKPHASEID IS NULLBEGINRETURN( )ENDSELECT @TASKID=TASKID @PERCENT=ISNULL(WORKPERCENT )/ FROM TABLETASKPHASEWHERE ID=@TASKPHASEIDSELECT @HOUR=ISNULL(TASKTIME ) FROM TABLETASKWHERE ID=@TASKIDSET @RETURN=@HOUR*@PERCENTRETURN (@RETURN)END調用函數的存儲過程部分 CREATE PROCEDURE [DBO] [PROC_CALCCA]@ROID INTASBEGINDECLARE @CA FLOATUPDATE TABLEFMECASETCvalue_M= ISNULL(MODERATE )*ISNULL(FMERATE )*ISNULL(B BASFAILURERATE )*[DBO] [FUN_GETTIME](C ID)FROM TABLEFMECA TABLERELATION B TABLETASKPHASE CWHERE ROID=@ROID AND TASKPHASEID=C ID AND B ID=@ROIDSELECT @CA=SUM(ISNULL(Cvalue_M )) FROM TABLEFMECA WHERE ROID=@ROIDUPDATE TABLERELATIONSET CRITICALITY=@CAWHERE ID=@ROIDENDGO

◆ 我們要根據某表的某些記錄 先計算後求和 因為無法存儲中間值 平時我們也用游標的方法進行計算 但SQL Server 里支持

SUM ( [ ALL DISTINCT ] eXPression )expression

是常量 列或函數 或者是算術 按位與字元串等運算符的任意組合 因此我們可以利用這一功能

函數部分

lishixin/Article/program/SQLServer/201311/22423

Ⅸ 請教:關於SQL語句中常量的用法

於SQL語句中常量的用法
定義常量
格式:常量名
constant
數據類型標識符
[not
null]
:=


:
iCount
constant
Int
not
null:=200
說明:
定義常量iCount,值為200;

Ⅹ 補充:SQL常用判斷語句和函數

select  ID,UserName,namer=( case when score <= '50') then  '實習'

                                                      when score > '50' and score <= '500'   then '村衛生員'

                                                      when score > '500' and score <= '1000'   then '村衛生員'

                                                      when score > '1000' and score <= '1500'  then '鄉衛生員'

                                                       else  '健康大使'   end

from table

where ...

參數一:check_expression

               將被檢查是否為 NULL的表達式。check_expression 可以是任何類型的。

參數二:replacement_value

                在 check_expression 為 NULL時將返回的表達式。replacement_value 必須與 check_expresssion 具有相同的類型。

返回類型:

                 返回與 check_expression 相同的類型。

注釋:

           如果 check_expression 不為 NULL,那麼返回該表達式的值;否則返回 replacement_value。

           例:ISNULL(T.sum, 0)

例如:a / b 但是b有可能是0,可以將表達式改為:

            case when b = 0 then 0 else   a/b   end

例如:a/b 但是a和b都是整型,那麼就需要用到decimal進行轉換

            case when b<>0 then convert(decimal(6,2))

例如:

          SELECT 10*1.0/4    結果為2.500000

          所以,如果我們要保留2位小數的話,語句如下:

          SELECT CAST (10*1.0/4 AS DECIMAL (18,2))

① SELECT 可以在一條語句里對多個變數同時賦值,而SET只能一次對一個變數賦值

     例如:SELECT @A = 'Y',@B = 'M'

                而SET要達到同樣的效果,需要:

                SET @A = 'Y'

                SET @B = 'M'

②表達式返回多個值時,用SET將會出錯,而SELECT將取最後一個值

     例如:假設Table這個表中有多個IsRight記錄

                SELECT @A = IsRight  FROM Table ---- 將取最後一個值

                SET @A = IsRight  FROM Table ---- 將報錯

③表達式無返回值,用SET將置變數值為NULL,用SELECT交保持變數值

    以下假定Table記錄為空

    SET @A = '初始值'

    SELECT @A = IsRight FROM Table  ---此時@A為'初始值'

    SET @A =(SELECT IsRight FROM Table)--此時@A為NULL

④使用標量子查詢時,如果無返回值,SET和SELECT一樣,都將置為NULL

    以下假定Table記錄為空

    SET @A = '初始化'

    SELECT @A = (SELECT IsRight FROM Table) ---此時@A為NULL

    SET @A  = (SELECT IsRight FROM Table)  ---此時@A為NULL

例如:select * from systemInfo as a

           select a.* .......

如圖1所示的RANK結果列,有三位同學是100分的,位於第一名狀態,93分的同學則是第4名的狀態

如圖1.而DENSE_RANK()函數則不同,三名100分的同學還是位於第一名狀態,93分的同學位於第2的狀態

如圖1.對所有記錄進行依次排序(1、2、3、4、5、、、)

如實際應用中需要進行分頁處理,就會用到這個函數。

例子如下:一頁顯示20行數據

set @sql = @sql + ' select  ROW_NUMBER() OVER ( ORDER BY '

if(@sorts <> '')

begin

set @sql = @sql + ' ave desc, '

end

set @sql = @sql + ' FatDate desc,CreateDate desc ) as no, '

set @sql = @sql + ' ID, TourCode, LinesName, FatDate into 【#tempA】』

//通過行號控制,這里只顯示20行

set @sql = @sql + 『select * top(20)from 【#tempA】where 1=1 』

if(@rows > 0)

begin

set @sql  = @sql + 『AND (no >』 + LTRIM(@rows) + 『)』

end

如圖1 ,對學生的成績進行分組,NTILE(常量),也就是說括弧裡面的常量是多少, 就分為幾組。

SQL CHECK 約束:CHECK 約束用於限制列中的值的范圍。

                                  如果對單個列定義 CHECK 約束,那麼該列只允許特定的值。

                                  如果對一個表定義 CHECK 約束,那麼此約束會在特定的列中對值進行限制。

SQL DEFAULT 約束:DEFAULT 約束用於向列中插入默認值。

                                    如果沒有規定其他的值,那麼會將默認值添加到所有的新記錄。

函數coalesce功能是返回參數中第一個非NULL值。

例如:coalese(boss,0) :如果boss為空,則返回0;如果boss不為空,則返回boss

           coalese(boss,null,1):如果boss為空,看下一個參數為null,則返回最後一個參數1;如果boss

                                                 不為空,則返回boss這個參數。

意思是name=apple,那麼返回0;否則的話返回null

意思是 如果 bonus is null , 那麼返回 0, 否則返回 bonus

例:select ID from table where ID in (『+ LTRIM(@ID)+』)

有時也需注意類型轉換問題。

if(@dateS <> 『』)

begin

set @sql = @sql + 『AND (DATEDIFF(day,『』『+@dateS+』』』,FatDay) >=0)』

end

if(@dateE <> 『』)

begin

set @sql = @sql + 『AND (DATEDIFF(day,『』『+@dateE+』』』,FatDay) <=0)』

end

1、①年齡:

select YEAR(GETDATE()) - substring('IDCard',7,4) as Age

     ②年齡:(精確到天)

select  datediff( year, '1988-1-18' , getdate())  -  case when datediff ( day, getdate(),  dateadd( year, datediff( year, '1988-1-18', getdate()), '1988-1-18')) >= 0  then  1  else  0  end

2、性別:

case when len(身份證號) = 15 and cast(substring(身份證號,15,1) as int) % 2 = 0 then '女'

         when len(身份證號) = 15 and cast(substring(身份證號,15,1) as int) % 2 = 1 then '男'

         when len(身份證號) = 18 and cast(substring(身份證號,17,1) as int) % 2 = 0 then '女'

         when len(身份證號) = 18 and cast(substring(身份證號,17,1) as int) % 2 = 1 then '男'

else null end  as Sex

3、所屬省份:

CASE LEFT(`card_id`,2) WHEN 11 THEN '北京' WHEN 12 THEN '天津' WHEN 13 THEN '河北' WHEN 14 THEN '山西' WHEN 15 THEN '內蒙古' WHEN 21 THEN '遼寧'

    WHEN 22 THEN '吉林' WHEN 23 THEN '黑龍江' WHEN 31 THEN '上海' WHEN 32 THEN '江蘇' WHEN 33 THEN '浙江' WHEN 34 THEN '安徽' WHEN 35 THEN '福建' WHEN      36 THEN '江西'

    WHEN 37 THEN '山東' WHEN 41 THEN '河南' WHEN 42 THEN '湖北' WHEN 43 THEN '湖南' WHEN 44 THEN '廣東' WHEN 45 THEN '廣西' WHEN 46 THEN '海南' WHEN 50 THEN '重慶' WHEN 51 THEN '四川'

    WHEN 52 THEN '貴州' WHEN 53 THEN '雲南' WHEN 54 THEN '西藏' WHEN 61 THEN '陝西' WHEN 62 THEN '甘肅' WHEN 63 THEN '青海' WHEN 64 THEN '寧夏' WHEN 65 THEN '新疆' END AS 所屬省份

一般寫程序時會出現一個頁面當中只顯示固定多少行,這個時候sql語句中就會出現通過判斷行號來實現

例如:

圖3即是對行號的sql語句實現。

接下來說說頁數的實現方法:

頁數則是類似於網頁上面分頁功能的實現。

select a, b, case b when '申請人' then 0 else 1 end as row 

from table

where 。。。

order by row,date asc

select sum(a.time-b.time)

from(select ElogID,time from 表名 where EventSubType = 1) a,(select data,time from 表名 where EventSubType = 2) b

where a.ElogID=b.ElogID

未完待續。。。。