最近公司接了个报表的项目,报表的要求非常高,算法非常变态,取的字段又多。搞得其中的sql都像文章似的。平时,我写一般都用标准的sql,这次用户需求那么复杂,时间又紧,而其用户只用sql server 2005,所以开始用起了数据库特性。下面是收集的一些函数(其中一些别的数据库也通用的)
聚合函数
若要汇总一定范围的数值,请使用以下函数:
- SUM
-
返回表达式中所有值的总和。
语法
SUM(aggregate)
SUM 只能与包含数值的字段一起使用。将忽略空值。
- AVERAGE
-
返回表达式中所有非空值的平均值(算术平均值)。
语法
AVERAGE(aggregate)
AVERAGE 只能与包含数值的字段一起使用。将忽略空值。
- MAX
-
返回表达式中的最大值。
语法
MAX(aggregate)
对于字符列,MAX 将按排序顺序来查找最大值。将忽略空值。
- MIN
-
返回表达式中的最小值。
语法
MIN(aggregate)
对于字符列,MIN 将按排序顺序来查找最小值。将忽略空值。
- COUNT
-
返回组中非空项的数目。
语法
COUNT(aggregate)
COUNT 始终返回 Int 数据类型值。
- COUNTDISTINCT
-
返回组中某项的非空非重复实例数。
语法
COUNTDISTINCT(aggregate)
- STDev
-
返回某项的非空值的标准偏差。
语法
STDEV(aggregate)
- STDevP
-
返回某项的非空值的总体标准偏差。
语法
STDEVP(aggregate)
- VAR
-
返回某项的非空值的方差。
语法
VAR(aggregate)
- VARP
-
返回某项的非空值的总体方差。
语法
VARP(aggregate)
条件函数
若要测试条件,请使用以下函数:
- IF
-
如果指定了计算结果为 TRUE 的条件,将返回一个值;如果指定了计算结果为 FALSE 的条件,则返回另一个值。
语法
IF(condition, value_if_true, value_if_false)
条件必须是计算结果为 TRUE 或 FALSE 的值或表达式。如果条件为 True,则 Value_if_true 表示返回的值。如果条件为 False,则 Value_if_false 表示返回的值。
- IN
-
确定某项是否是集的成员。
语法
IN(item, set)
- Switch
-
对一系列表达式求值并返回与其中第一个为 True 的表达式相关联的表达式的值。Switch 可以有一个或多个条件/值对。
语法
Switch(condition1, value1)
转换
若要将值从一种数据类型转换为另一种数据类型,请使用以下函数:
- INT
-
将值转换为整数。
语法
INT(value)
- DECIMAL
-
将值转换为十进制数字。
语法
DECIMAL(value)
- FLOAT
-
将值转换为 float 数据类型。
语法
FLOAT(value)
- TEXT
-
将数值转换为文本。
语法
TEXT(value)
日期和时间函数
若要显示日期或时间,请使用以下函数:
- DATE
-
返回给定年、月、日的上午 12:00:00 的日期时间值。
语法
DATE(year, month, day)
- DATEONLY
-
从日期时间值返回年、月和日。
语法
DATEONLY(datetime)
- DATETIME
-
返回给定年、月、日、小时、分钟和秒的日期时间。
语法
DATETIME(year, month, day, hour, minute, second)
- YEAR
-
返回日期时间的年份值。
语法
YEAR(datetime)
- QUARTER
-
返回日期时间的日历季度 (1-4)。
语法
QUARTER(datetime)
- MONTH
-
返回日期时间中的月。
语法
MONTH(datetime)
- DAY
-
从日期时间中提取“日”。
语法
DAY(datetime)
- HOUR
-
从日期时间中提取小时。
语法
HOUR(datetime)
- MINUTE
-
从日期时间中提取分钟。
语法
MINUTE(datetime)
- SECOND
-
从日期时间中提取秒。
语法
SECOND(datetime)
- DAYOFYEAR
-
返回日期时间中一年中的第几天。1 月 1 日 = 1 到 12 月 31 日 = 366(假定是闰年)。
语法
DAYOFYEAR(datetime)
- WEEK
-
返回日历年中该周的数值。
语法
WEEK(datetime)
- DAYOFWEEK
-
返回星期几,从星期一开始。星期一 = 1 到星期日 = 7。
语法
DAYOFWEEK(datetime)
- NOW
-
返回当前日期和时间。
语法
NOW( )
- TODAY
-
返回当前日期。
语法
TODAY( )
- DATEDIFF
-
返回开始日期时间和结束日期时间之间的差。
语法
DATEDIFF(interval, datetime, datetime)
- DATEADD
-
返回将指定数目的时间间隔单位添加到原始日期时间后得到的日期时间。
语法
DATEADD(interval, units, datetime)
-
-
CONVERT
将某种数据类型的表达式显式转换为另一种数据类型。由于某些需求经常用到取日期格式的不同.现以下可在
SQL Server中 将日期格式化. -
SQL Server 支持使用科威特算法的阿拉伯样式中的数据格式。
-
在表中,左侧的两列表示将 datetime 或 smalldatetime 转换为字符数据的 style 值。给 style 值加 100,可获得包括世纪数位的四位年份 (yyyy)。
不带世纪数位 (yy) | 带世纪数位 (yyyy) | 标准 | 输入/输出** |
---|---|---|---|
- | 0 或 100 (*) | 默认值 | mon dd yyyy hh:miAM(或 PM) |
1 | 101 | 美国 | mm/dd/yyyy |
2 | 102 | ANSI | yy.mm.dd |
3 | 103 | 英国/法国 | dd/mm/yy |
4 | 104 | 德国 | dd.mm.yy |
5 | 105 | 意大利 | dd-mm-yy |
6 | 106 | - | dd mon yy |
7 | 107 | - | mon dd, yy |
8 | 108 | - | hh:mm:ss |
- | 9 或 109 (*) | 默认值 + 毫秒 | mon dd yyyy hh:mi:ss:mmmAM(或 PM) |
10 | 110 | 美国 | mm-dd-yy |
11 | 111 | 日本 | yy/mm/dd |
12 | 112 | ISO | yymmdd |
- | 13 或 113 (*) | 欧洲默认值 + 毫秒 | dd mon yyyy hh:mm:ss:mmm(24h) |
14 | 114 | - | hh:mi:ss:mmm(24h) |
- | 20 或 120 (*) | ODBC 规范 | yyyy-mm-dd hh:mm:ss[.fff] |
- | 21 或 121 (*) | ODBC 规范(带毫秒) | yyyy-mm-dd hh:mm:ss[.fff] |
- | 126(***) | ISO8601 | yyyy-mm-dd Thh:mm:ss:mmm(不含空格) |
- | 130* | 科威特 | dd mon yyyy hh:mi:ss:mmmAM |
- | 131* | 科威特 | dd/mm/yy hh:mi:ss:mmmAM |
逻辑函数
若要测试条件的逻辑,请使用以下函数:
- AND
-
如果所有参数都为 TRUE,则返回 TRUE;如果一个或多个参数为 FALSE,则返回 FALSE。
语法
AND(logical, logical)
参数的计算结果必须是逻辑值(例如 TRUE 或 FALSE),或者参数必须是包含逻辑值的数组或引用。如果数组或引用参数包含文本或空单元,则忽略这些值。
- OR
-
如果任一参数为 TRUE,则返回 TRUE;如果所有参数均为 FALSE,则返回 FALSE。
语法
OR(logical, logical)
参数的计算结果必须是逻辑值(例如 TRUE 或 FALSE),或者是包含逻辑值的数组或引用。如果数组或引用包含文本或空单元,则忽略这些值。
- NOT
-
颠倒其参数的值。如果希望确保某子句不等于特定的值,请使用 NOT。
语法
NOT(logical)
如果值为 False,NOT 将返回 True;如果值为 True,NOT 将返回 False。
数学函数
若要进行数值操作,请使用以下函数:
- MOD
-
返回数字除以除数之后的余数。除数不能为 0。
语法
MOD(number, divisor)
- TRUNC
-
按指定的位数截断数字。如果数字为正,则从小数点右侧截断数字。如果数字为负,则从小数点左侧截断数字。
语法
TRUNC(number, digits)
- ROUND
-
将数字舍入到指定的位数。
语法
ROUND(number, digits)
如果位数大于 0(零),则将数字舍入到指定的小数位数。如果位数为 0,则数字舍入到最近的整数。如果数字小于 0,则数字舍入到小数点左侧。
运算符
算术运算符
若要执行基本的数学运算(例如加法、减法或乘法)、组合数字以及生成数值结果,请使用以下运算符:
- + 加
-
用于将两个或多个项相加。
语法
value + value
- - 减
-
用于从一个项减去另一个项。
语法
value- value
- * 乘
-
用于使项相乘。
语法
value* value
- / 除
-
用于对项进行除运算。除数不能为 0。
语法
value/divisor
- - 求反
-
更改值的符号。
语法
-value
- ^ 求幂
-
用于对值进行幂运算(求幂)。
语法
value^power
比较运算符
若要比较两个值并返回逻辑值 True 或 False,请使用以下运算符:
- = 等于
-
用于使两个值相等。如果 value1 等于 value2,则为 True。
语法
value1= value2
- <> 不等于
-
用于指示两个值不相等。如果 value1 不等于 value2,则为 True。
语法
value1 <> value2
- > 大于
-
用于指示一个值大于另一个值。如果 value1 大于 value2,则为 True。
语法
value1 > value2
- >= 大于或等于
-
用于指示一个值大于或等于另一个值。如果 value1 大于或等于 value2,则为 True。
语法
value1 >= value2
- < 小于
-
用于指示一个值小于另一个值。如果 value1 小于 value2,则为 True。
语法
value1 < value2
- <= 小于或等于
-
用于指示一个值小于或等于另一个值。如果 value1 小于或等于 value2,则为 True。
语法
value1 <= value2
文本函数
若要在报表中进行文本操作,请使用以下函数:
- Concat (&)
-
将两个字符串组合为一个字符串。第二个字符串追加到第一个字符串的末尾。
语法
string & string
- Find
-
第一个字符串实例的位置。
语法
FIND(string, substring)
- Left
-
返回字符串最左侧的一些字符。如果在函数内指定的长度参数值小于零,则这种行为未定义。
语法
LEFT(string, length)
- Length
-
返回字符串中的字符数。
语法
LENGTH(string)
- Lower
-
将字符串从大写字符转换为小写字符。
语法
LOWER(string)
- LTrim
-
返回删除了前导空格的字符串。
语法
LTRIM(string)
- Replace
-
返回一个字符串,其中某个子字符串的所有实例均替换为另一个子字符串。
语法
REPLACE(find, replace, string)
- Right
-
返回字符串最右侧的一些字符。如果在函数内指定的长度参数值小于零,则这种行为未定义。
语法
RIGHT(string, length)
- RTrim
-
返回删除了尾随空格的字符串。
语法
RTRIM(string)
- Text
-
将数值转换为字符串。
语法
TEXT(value)
- Substring
-
返回字符串中的子字符串。如果在函数内指定的长度参数值小于零,则这种行为未定义。
语法
SUBSTRING(string, start, length)
- Upper
-
将字符串从小写字符转换为大写字符。
语法
UPPER(string)
信息函数
若要返回有关用户的全局信息,请使用以下函数:
- GetUserID
-
返回用户用来访问数据的 ID。
语法
GETUSERID()
- GetUserCulture
-
返回用户的语言或区域设置。
Syntax
GETUSERCULTURE()