1、BETWEEN
A. 使用 BETWEEN
SELECT title_id, ytd_sales
FROM titles
WHERE ytd_sales BETWEEN 4095 AND 12000
结果集:
title_id ytd_sales
-------- -----------
BU1032 4095
BU7832 4095
PC1035 8780
PC8888 4095
TC7777 4095
(5 row(s) affected)
B. 使用 > 和 < 代替 BETWEEN
SELECT title_id, ytd_sales
FROM titles
WHERE ytd_sales > 4095 AND ytd_sales < 12000
结果集:
title_id ytd_sales
-------- -----------
PC1035 8780
(1 row(s) affected)
2、CAST 和 CONVERT
当具有不同小数位数的数据类型进行转换时,值将被截断为最精确的数位。例如:
SELECT CAST(10.6496 AS int)
结果为 10。
转换时,若目标数据类型的小数位数小于源数据类型的小数位数,则要转换的值将被四舍五入。例如:
CAST(10.3496847 AS money)
结果是 $10.3497。
当将非数字类型的 char、nchar、varchar 或 nvarchar 数据转换为 int、float、numeric 或 decimal 时,SQL Server 将返回错误信息。当将空字符串 (" ") 转换为 numeric 或 decimal 时,SQL Server 也将返回错误信息。
###############例子##############
-- Use CAST.
SELECT CAST(ROUND(ytd_sales/price, 0) AS int) AS 'Copies'
FROM titles
将总的截止当前销售额 (ytd_sales) 与每本图书的价格 (price) 相除,进行单独列计算 (Copies)。在四舍五入到最接近的整数后,此结果将转换为 int 数据类型。
-- Use CONVERT.
SELECT SUBSTRING(title, 1, 30) AS Title, ytd_sales
FROM titles
WHERE CONVERT(char(20), ytd_sales) LIKE '3%'
检索书名(这些图书的截止当前销售额的第一位数字为 3),并将这些图书的 ytd_sales 转换为 char(20)。
#################################
3、CHARINDEX(返回字符串中指定表达式的起始位置)
SELECT CHARINDEX('wonderful', notes)
FROM titles
WHERE title_id = 'TC3218'
返回序列"wonderful"在 titles 表的 notes 列中开始的位置。
4、CONTAINS
SELECT ProductName
FROM Products
WHERE UnitPrice = 15.00
AND CONTAINS(QuantityPerUnit, 'bottles')
查找包含词"bottles"且价格为 $15.00 的所有产品。
其他用法:
CONTAINS(ProductName, ' "sasquatch ale" OR "steeleye stout" ')--返回包含短语 "sasquatch ale" 或 "steeleye stout" 的所有产品。
CONTAINS(ProductName, ' "choc*" ')--返回所有满足该条件的产品名称:这些产品名称至少含有一个以 ProductName 列中前辍 Choc 起始的词。
CONTAINS(DeSCRIPTion, '"sea*" OR "bread*"')--返回包含字符串 "sea" 或 "bread" 的所有分类描述。
CONTAINS(ProductName, 'spread NEAR Boysenberry')--返回在词 "spread" 附近有词 "Boysenberry" 的所有产品名称。
CONTAINS(ProductName, ' FORMSOF (INFLECTIONAL, dry) ')--搜索具有 dry 形式的词的所有产品:dried 和 drying 等等。
5、COUNT(返回组中项目的数量)
SELECT COUNT(DISTINCT city) FROM authors -- 查找作者所居住的不同城市的数量。
SELECT COUNT(*) FROM titles -- 查找图书和书名的总数。
6、DATEADD(在向指定日期加上一段时间的基础上,返回新的 datetime 值,如果 date 参数是 smalldatetime,返回 smalldatetime
。)
SELECT DATEADD(day, 21, pubdate) AS timeframe FROM titles
当前发布日期加上 21 天。
7、DATEDIFF(返回跨两个指定日期的日期和时间边界数。)
SELECT DATEDIFF(day, pubdate, getdate()) AS no_of_days FROM titles
返回标题发布日期和当前日期间的天数。
8、DATEPART(返回代表指定日期的指定日期部分的整数。)
假设日期是 5 月 29 日。
SELECT DATEPART(month, GETDATE())
结果集:
-----------
5
(1 row(s) affected)
9、EXISTS(指定一个子查询,检测行的存在。如果子查询包含行,则返回 TRUE。)
SELECT title
FROM titles
WHERE EXISTS
(SELECT *
FROM publishers
WHERE pub_id = titles.pub_id
AND city LIKE 'B%')
10、判断数据类型的函数
ISNUMERIC( expression ) -- 确定表达式是否为一个有效的数字类型。
ISDATE ( expression ) -- 确定输入表达式是否为有效的日期。
11、字符操作
LEFT ( character_expression , integer_expression ) -- 返回从字符串左边开始指定个数的字符。
RIGHT ( character_expression , integer_expression ) -- 返回字符串中从右边开始指定个数的 integer_expression 字符。
LEN ( string_expression ) -- 返回给定字符串表达式的字符个数,其中不包含尾随空格。
LOWER ( character_expression ) -- 将大写字符数据转换为小写字符数据后返回字符表达式。
LTRIM ( character_expression ) -- 删除起始空格后返回字符表达式。
RTRIM ( character_expression ) -- 截断所有尾随空格后返回一个字符串。
SUM ( [ ALL | DISTINCT ] expression ) -- 返回表达式中所有值的和,或只返回 DISTINCT 值。SUM 只能用于数字列。空值将被忽略。
MAX ( [ ALL | DISTINCT ] expression ) -- 返回表达式的最大值。
MIN ( [ ALL | DISTINCT ] expression ) -- 返回表达式的最小值。
YEAR ( date ) -- 返回表示指定日期中的年份的整数。
MONTH ( date ) -- 返回代表指定日期月份的整数。
RAND ( [ seed ] ) -- 返回 0 到1 之间的随机float 值。
REVERSE ( character_expression ) -- 返回字符表达式的反转(character_expression 必须为可隐性转换为 varchar 的数据类型)。
SUBSTRING ( expression , start , length ) -- 返回字符、binary、text 或 image 表达式的一部分。
REPLACE -- 用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式,支持字符数据或二进制数据(不支持NTEXT)。
用 xxx 替换 abcdefghi 中的字符串 cde。
SELECT REPLACE('abcdefghicde','cde','xxx')
结果集:
------------
abxxxfghixxx
(1 row(s) affected)
ROUND ( numeric_expression , length [ , function ] )
SELECT ROUND(123.9994, 3), ROUND(123.9995, 3)
下面是结果集:
----------- -----------
123.9990 124.0000