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

sql中使用corr

發布時間: 2022-08-11 23:46:41

sql中count函數的使用

COUNT() 函數返回匹配指定條件的行數。

SQL COUNT(column_name) 語法

COUNT(column_name) 函數返回指定列的值的數目(NULL 不計入):

SELECT COUNT(column_name) FROM table_name;

SQL COUNT(*) 語法

COUNT(*) 函數返回表中的記錄數:

SELECT COUNT(*) FROM table_name;

SQL COUNT(DISTINCT column_name) 語法

COUNT(DISTINCT column_name) 函數返回指定列的不同值的數目:

SELECT COUNT(DISTINCT column_name) FROM table_name;

注釋:COUNT(DISTINCT) 適用於 ORACLE 和 Microsoft SQL Server,但是無法用於 Microsoft Access。

SQL COUNT(column_name) 實例

下面的 SQL 語句計算 "access_log" 表中 "site_id"=3 的總訪問量:

實例

SELECT COUNT(count) AS nums FROM access_log
WHERE site_id=3;

SQL COUNT(*) 實例

下面的 SQL 語句計算 "access_log" 表中總記錄數:

實例

SELECT COUNT(*) AS nums FROM access_log;

執行以上 SQL 輸出結果如下:

② sql中的collation干什麼用

排序規則(collation)

關於SQL Server的排序規則,估計大家都不陌生,在創建資料庫時我們經常要選擇一種排序規則(conllation),一般我們會留意到每一種語言的排序規則都有許多種,比如標准大陸簡體中文Chinese_PRC的排序規則就有數十種之多

這些排序規則有什麼作用呢?讓我們先來看看MS官方的解釋:
排序規則指定了表示每個字元的位模式。它還指定了用於排序和比較字元的規則。排序規則具有下面的特徵:
語言
區分大小寫
區分重音
區分假名
比如在SQL Server 2005中,排序規則名稱由兩部份構成,比如 Chinese_PRC_CI_AI_WS
前半部份是指本排序規則所支持的字元集,如Chinese_PRC 指針對大陸簡體字UNICODE的排序規則。
後半部份即後綴的含義如下:

_BIN
指定使用向後兼容的二進制排序順序。
_BIN2 指定使用 SQL Server 2005 中引入的碼位比較語義的二進制排序順序。
_Stroke 按筆劃排序
_CI(CS) 是否區分大小寫,CI不區分,CS區分
_AI(AS) 是否區分重音,AI不區分,AS區分
_KI(KS) 是否區分假名類型,KI不區分,KS區分
_WI(WS) 是否區分全半形,WI不區分,WS區分

既然排序規則如此復雜,那麼應用了不同排序規則的列之間默認情況下便不能進行Union、Join、Like等equal操作了,於是便有了排序規則(collation)沖突。

排序規則(collation)沖突

我們知道,SQL Server 從2000 開始,便支持多個排序規則。SQL Server 2000 的資料庫可使用除默認排序規則以外的其他排序規則。此外,SQL Server 2000 還支持為列專門制定排序規則。
這樣一來,我們在寫跨表、跨資料庫、跨伺服器操作的T-SQL時,如果equal的欄位排序規則不同,便會發生排序規則沖突。
比如我們先見兩個結構相同的表,但欄位的排序規則不同:
-- 1. Create TableA.
CREATE TABLE TagsTableA
(
TagName NVARCHAR(64) COLLATE Chinese_PRC_BIN
)
-- 2. Create TableB.
CREATE TABLE TagsTableB
(
TagName NVARCHAR(64) COLLATE Chinese_PRC_CI_AS
)

當表建好之後執行:
-- 3. Try to join them
SELECT * from TagsTableA A INNER JOIN TagsTableB B on A.TagName = B.TagName

便會出下類似下面的問題:
無法解決 equal to 操作中 "Chinese_PRC_BIN" 和 "Chinese_PRC_CI_AS" 之間的排序規則沖突。

常見的場景——臨時表

我們知道,SQL Server的臨時表是保存在Tempdb資料庫中的。而使用臨時表的資料庫與臨時表的排序規則(conllation)不一定相同。所以,當Tempdb的排序規則與當前使用臨時表的資料庫排序規則不同時,便會出現排序規則沖突。
一般來說,我們在創建臨時表時可能不會注意到排序規則,從而留下排序規則沖突的隱患。
比如Openlab V4.0的Blog模塊中的一個存儲過程,便有著這種隱患:
/****** 對?象ó: StoredProcere [blogs].[up_CreateGetTagIds] 腳本日期: 01/20/2010 19:10:32 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

/*
RETURN VALUES:
Ids
*/
-- =============================================
-- Author: <Lance Zhang>
-- Create date: <2010-01-06>
-- Description: <Make sure all the tag EXISTS in DB, and then get their ids.>
-- 1. Create Temp Table.
-- 2. Insert TagNames into Temp Table.
-- 3. Add new Tags to [Categories] from query Temp Table.
-- 4. Batch Get All Tag Ids from [Categories].
-- 5. Clear and drop Temp Table.
-- =============================================
ALTER PROCEDURE [blogs].[up_CreateGetTagIds]
(
@BlogId INT,
@TagNames XML
)
AS
BEGIN
/******************************* SET CONFIG *************************************************/
SET NOCOUNT ON
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SET NUMERIC_ROUNDABORT OFF

/******************************* DECLARE VARIABLE *************************************************/

/********************************BEGIN TRANSATION**********************************************/

BEGIN TRY

BEGIN TRANSACTION;

-- 1. Create Temp Table.
CREATE TABLE #TagsTable
(
TagName NVARCHAR(64)
)

-- 2. Insert TagNames into Temp Table.
INSERT INTO
#TagsTable
SELECT
TG.Tags.value('@i','NVARCHAR(64)') AS TagName
FROM
@TagNames.nodes('/ts/t') TG(Tags)

-- 3. Add new Tags to [Categories] from query Temp Table.
BEGIN
INSERT INTO
[Categories]
(
[BlogId]
,[ParentId]
,[CategoryType]
,[CategoryName]
,[LoweredCategoryName]
,[Slug]
,[LoweredSlug]
,[Description]
,[CreatedDateUtc]
,[TotalEntities]
,[SortOrder]
,[State]
)
SELECT
@BlogId,
0, -- ParentId, 0 as default.
2, -- CategoryType, 2 as Post Tag.
TT.TagName,
LOWER(TT.TagName),
TT.TagName, -- Slug, use CategoryName as default.
LOWER(TT.TagName), -- LoweredSlug, use LoweredCategoryName as default.
'', -- Description, Empty as default.
GETUTCDATE(),
0, -- TotalEntities, 0 as default.
1, -- SortOrder of PostTags can always be 1.
1 -- State, 1 as Normal.
FROM
#TagsTable TT
WHERE
LOWER(TT.TagName) NOT IN
(
SELECT
C.[LoweredCategoryName]
FROM
[Categories] C WITH( UPDLOCK, HOLDLOCK )
WHERE
[BlogId] = @BlogId
AND [CategoryType] = 2 -- Post Tag.
)

END

-- 4. Batch Get All Tag Ids from [Categories].
BEGIN
SELECT
[CategoryId]
FROM
[Categories] C WITH(NOLOCK)
JOIN
#TagsTable TT
ON
C.[LoweredCategoryName] = LOWER( TT.TagName )
WHERE
C.[BlogId] = @BlogId
AND C.[CategoryType] = 2 -- Post Tag.
AND C.[State] = 1 -- 1 as Normal status.
END

-- 5. Clear and drop Temp Table.
TRUNCATE TABLE
#TagsTable
DROP TABLE
#TagsTable

COMMIT TRANSACTION;
RETURN 1

END TRY

BEGIN CATCH
IF XACT_STATE() <> 0
BEGIN
ROLLBACK TRANSACTION;
RETURN -1
END
END CATCH
END
GO

常見的解決方案

知道了什麼是排序規則沖突,我們接下來分析沖突的解決方案,以資料庫級別的排序規則為例,一般來說,解決方案有下面幾種
把SQL實例刪了重建 ——大多數情況下等於沒說-_-|||
修改資料庫的排序規則 ——參考阿牛兄的這篇文章
在T-SQL中使用COLLATE DATABASE_DEFAULT來解決沖突 ——接下來主要討論這個

COLLATE DATABASE_DEFAULT

Collate XXX 操作可以用在欄位定義或使用時,它會將欄位定義或轉換成XXX 的排序規則格式。而Collate Database_Default 則會將欄位定義或轉換成當前資料庫的默認排序規則,從而解決沖突。
比如在下面的代碼中便使用了Collate Database_Default 來解決欄位在equal操作中的排序規則沖突:
Insert into Security.Report (Name)
Select C.Path From SSRS.Catalog C
Where C.Path Collate Database_Default Like @ReportPath + '/%'
And C.Path Collate Database_Default Not In (Select Name From Security.Report R)

當然,在創建臨時表時若對欄位定義加上Collate Database_Default ,也可以方便地解決潛在的排序規則沖突,比如上一節中提到的存儲過程,只要做如下修改即可。
-- 1. Create Temp Table.
CREATE TABLE #TagsTable
(
TagName NVARCHAR(64) COLLATE DATABASE_DEFAULT
)

結束語
對於專業的SQLer來說,排序規則的應用場景還有很多,例如利用排序規則特點計算漢字筆劃和取得拼音首字母等等,更多信息,請查閱MSDN文檔:http://msdn.microsoft.com/zh-cn/library/aa258237(en-us,SQL.80).aspx

③ 如何在SQL語句中的BETWEEN使用變數

1.樓上說的我不贊同。的確有小大之分,但是如果順序寫反不會報錯而是查詢結果為空,也就是沒有能滿足這個條件的結果。
2.你錯誤的原因是引號的問題
sql.Add('select
*
from
成績表
where
'+course+'
BETWEEN
+up+
AND
+blow+');
between
up
and
blow
都在引號間
被做字元串處理了。up和blow都不是變數了。
看上去是delphi程序吧:
改為如下:
sql.Add('select
*
from
成績表
where
'
+
QuotedStr(course)
+
'BETWEEN'+up+'and'+blow);
3.如果不是delphi程序,按該語法規則注意引號的嵌套就ok了
4.希望對你有幫助。

④ 在sql語句中 要使用contans必須建立什麼

前言:微軟的SQL Server資料庫是一個在中低端企業應用中佔有廣泛市場的關系型資料庫系統,它以簡單、方便、易用等特性深得眾多軟體開發人員和資料庫管理人員的鍾愛。但SQL Server 7.0以前的資料庫系統由於沒有全文檢索功能,致使無法提供像文本內容查找此類的服務,成為一個小小的遺憾。從SQL Server 7.0起,到如今的SQL Server 2000終於具備了全文檢索功能,使用戶可以高效地檢索存儲在資料庫char、varchar、text、ntext、nchar、nvarchar等數據類型列中的文本數據。
建立全文索引
在進行全文檢索之前,必須先建立和填充資料庫全文索引。為了支持全文索引操作,SQL Server 7.0新增了一些存儲過程和Transact-SQL語句。使用這些存儲過程創建全文索引的具體步驟如下(括弧內為調用的存儲過程名稱):
1. 啟動資料庫的全文處理功能(sp_fulltext_
database);;
2. 建立全文檢索目錄(sp_fulltext_catalog);
3.在全文檢索目錄中注冊需要全文索引的表(sp_fulltext_table);
4. 指出表中需要全文檢索的列名(sp_fulltext_
column);;
5. 為表創建全文索引(sp_fulltext_table);;
6. 填充全文檢索目錄(sp_fulltext_catalog)。
下面舉例說明如何創建全文索引,在本例中,對Test資料庫Book表中Title列和Notes列建立全文索引。
use test //打開資料庫
//打開全文索引支持,啟動SQL Server的全文搜索服務
execute sp_fulltext_database 『enable』
//建立全文檢索目錄ft_test
execute sp_fulltext_catalog 『ft_test』, 『create』
為Title列建立全文索引數據元,pk_title為Book表中由主鍵所建立的唯一索引,這個參數是必需的。
execute sp_fulltext_table 『book』,『create』, 『ft_test』,『pk_title』
//設置全文索引列名
execute sp_fulltext_column 『book』, 『title』, 『add』
execute sp_fulltext_column 『book』,『notes』, 『add』
//建立全文索引
execute sp_fulltext_table 『book』, 『activate』
//填充全文索引目錄
execute sp_fulltext_catalog 『ft_test』, 『start_full』
至此,全文索引建立完畢。
進行全文檢索
SQL Server 2000提供的全文檢索語句主要有CONTAINS和FREETEXT。CONTAINS語句的功能是在表的所有列或指定列中搜索:一個字或短語;一個字或短語的前綴;與一個字相近的另一個字;一個字的派生字;一個重復出現的字。
CONTAINS語句的語法格式為:
CONTAINS({column | *}), <contains_search_condition> )
其中,column是搜索列,使用「*」時說明對表中所有全文索引列進行搜索。Contains_search_
condition 說明CONTAINS語句的搜索內容,其語法格式為:
{||||}[{{AND|AND NOT|OR}}] [...n]
下面就simple_term和prefix_term參數做簡要說明:
simple_term是CONTAINS語句所搜索的單字或短語,當搜索的是一個短語時,必須使用雙引號作為定界符。其格式為:
{『word』|「 phrase」}
prefix_term說明CONTAINS語句所搜索的字或短語前綴,其格式為:
{「word*」 | 「phrase*」}
例如,下面語句檢索Book表的Title列和Notes列中包含「database」或「computer」字元串的圖書名稱及其注釋信息:
select title, notes
from book
where contains(tilte, 『database』) or contains(notes,『database』)
or contains(title,『computer』) or contains(notes,『computer』)
FREETEXT語句的功能是在一個表的所有列或指定列中搜索一個自由文本格式的字元串,並返回與該字元串匹配的數據行。所以,FREETEXT語句所執行的功能又稱做自由式全文查詢。
FREETEXT語句的語法格式為:FREETEXT({column | * },『freetext_string』)
其中,column是被搜索列,使用「*」時說明對表中的所有全文索引列進行搜索。Freetext_string參數指出所搜索的自由文本格式字元串。
例如,下面語句使用FREETEXT語句搜索Book表中包含「Successful Life」字元串的數據行:
select title, notes
from book
where freetext(*,『Successful Life』)

⑤ SQL中count和group by 的使用

select a,b,COUNT(*) count_ab from test group by a,b

⑥ sql中如何使用exception

RAISERROR
返回用戶定義的錯誤信息並設系統標志,記錄發生錯誤。通過使用 RAISERROR 語句,客戶端可以從 sysmessages 表中檢索條目,或者使用用戶指定的嚴重度和狀態信息動態地生成一條消息。這條消息在定義後就作為伺服器錯誤信息返回給客戶端。

語法
RAISERROR ( { msg_id | msg_str } { , severity , state }
[ , argument [ ,...n ] ] )
[ WITH option [ ,...n ] ]

參數
msg_id

存儲於 sysmessages 表中的用戶定義的錯誤信息。用戶定義錯誤信息的錯誤號應大於 50,000。由特殊消息產生的錯誤是第 50,000 號。

msg_str

是一條特殊消息,其格式與 C 語言中使用的 PRINTF 格式樣式相似。此錯誤信息最多可包含 400 個字元。如果該信息包含的字元超過 400 個,則只能顯示前 397 個並將添加一個省略號以表示該信息已被截斷。所有特定消息的標准消息 ID 是 14,000。

msg_str 支持下面的格式:

% [[flag] [width] [precision] [{h | l}]] type

可在 msg_str 中使用的參數包括:

flag

用於確定用戶定義的錯誤信息的間距和對齊的代碼。

可以查閱一下SQL SERVER的聯機叢書(在安裝了MSSQL的開始菜單里可以查到)

⑦ 在sql中convert怎麼用

下面鏈接是sql函數大全
實例
下面的腳本使用 CONVERT() 函數來顯示不同的格式。我們將使用 GETDATE() 函數來獲得當前的日期/時間:

CONVERT(VARCHAR(19),GETDATE())
CONVERT(VARCHAR(10),GETDATE(),110)
CONVERT(VARCHAR(11),GETDATE(),106)
CONVERT(VARCHAR(24),GETDATE(),113)
結果類似:

Dec 29 2008 11:45 PM
12-29-2008
29 Dec 08
29 Dec 2008 16:25:46.635

⑧ SQL語句加變數

SecTable.Year+iYearCorr,FirsTable.Year
SQL有做時間加減運算的函數

⑨ 如何在SQL語句中使用變數

使用變數一般是在存儲過程、方法、觸發器等T-Sql編程的時候用的,使用Declare 來定義變數,在方法/存儲過程/觸發器等裡面進行調用。

⑩ SQL中的CONVERT函數的用法是什麼

CONVERT( 要轉換到的類型, 合法的表達式, 格式化類型 )。