SQL Server 常用函数速查与用法详解
在 SQL Server 数据库开发中,熟练使用内置函数是高效处理数据的关键。本文系统整理了字符串、数学、日期及系统四大类常用函数的语法与应用场景,提供从基础查询到复杂数据处理的实用参考。
字符串处理函数
字符串函数主要用于数据的清洗、截取和格式转换,是日常 SQL 编写中使用频率最高的部分。
第1步:长度分析与子串提取
目的:获取字符串精确字节数或提取特定位置的字符片段。
Datalength(char_expr):返回字符串的字节长度,不包含尾部空格,常用于固定长度字段的校验。Substring(expression, start, length):从start位置开始,提取长度为length的子串。需注意索引通常从 1 开始。Right(char_expr, int_expr):仅返回字符串右侧的int_expr个字符,适合提取文件后缀或短代码。
第2步:字符大小写与内容重组
目的:统一文本格式或对字符串内容进行反转、填充操作。
Upper(char_expr)/Lower(char_expr):分别将字符串转换为全大写或全小写,常用于不区分大小写的比较前处理。Space(int_expr):生成指定数量的空格字符串。Replicate(char_expr, int_expr):将char_expr重复int_expr次。Reverse(char_expr):将字符串顺序完全反转。
第3步:替换与修剪空白符
目的:清理数据噪音或进行特定字符的替换操作。
Stuff(char_expr1, start, length, char_expr2):这是一个强大的替换函数,将char_expr1从start开始的length个字符替换为char_expr2。Ltrim(char_expr)/Rtrim(char_expr):分别去除左侧和右侧的空格,Trim()则是同时去除两侧(若支持)。
第4步:ASCII 码与字符串查找
目的:基于 ASCII 值操作字符或在文本中定位模式。
Ascii(char)与Char(ascii):互为反向操作,前者返回字符的 ASCII 码整数值,后者根据码值返回对应字符。Charindex(char_expr, expression):返回子串在母串中的起始位置(整型),未找到返回 0。Patindex("%pattern%", expression):返回指定 T-SQL 模式首次出现的起始位置,支持通配符搜索,未匹配则返回 0。
数学计算函数
数学函数用于执行基本的算术运算、数值取整及随机数生成。
第5步:绝对值与指数运算
Abs(numeric_expr):返回数值表达式的绝对值。Exp(float_expr):返回自然常数 e 的指定次幂。Power(numeric_expr, power):返回数值表达式的指定次幂。Sqrt(float_expr):返回给定浮点数的平方根。
第6步:向上/向下取整与四舍五入
这是处理财务数据和分页逻辑时最常用的取整方式。
Ceiling(numeric_expr):返回大于或等于该值的最小整数(向上取整)。Floor(numeric_expr):返回小于或等于该值的最大整数(向下取整)。Round(numeric_expr, int_expr):按int_expr指定的精度对数值进行四舍五入。若int_expr为负数,则表示对小数点左侧的位进行舍入。
第7步:其他数值辅助函数
Pi():返回圆周率 π 的值(约 3.1415926...)。Rand([int_expr]):生成 0 到 1 之间的随机 float 值。若提供种子值,可生成更确定的伪随机序列。Sign(int_expr):判断数值符号,正数返回 1,零返回 0,负数返回 -1。
日期与时间函数
日期函数涉及复杂的时区、年份闰年等逻辑,使用 Datepart 参数时需特别注意取值范围。
第8步:日期组件提取与偏移
目的:获取日期的某一部分,或计算相对当前时间的未来/过去时间点。
Getdate():返回当前系统时间戳。Dateadd(datepart, number, date_expr):在date_expr基础上增加number个单位的日期。例如:Dateadd(day, 1, Getdate())表示明天。Datediff(datepart, date_expr1, date_expr2):计算两个日期之间跨越的datepart单位数量。Datepart(datepart, date_expr):以整数形式返回日期的指定部分。Datename(datepart, date_expr):返回日期部分的名称字符串,如月份返回 "June",星期返回 "Monday"。
关键参数 Datepart 取值对照表:
| 缩写 | 含义 | 有效取值范围 |
|---|---|---|
yy / yyyy |
年份 | 1753-9999 |
qq |
季度 | 1-4 |
mm / m |
月份 | 1-12 |
dy / dd / d |
日期 | 1-366 (年), 1-31 (月) |
wk / ww |
周 | 1-54 |
dw |
一周内的第几天 | 1-7 |
hh |
小时 | 0-23 |
mi / n |
分钟 | 0-59 |
ss / s |
秒 | 0-59 |
ms |
毫秒 | 0-999 |
第9步:日期格式转换
Convert(varchar, date_expr, style):将日期转换为特定格式的字符串。第三个参数style控制显示格式(如 101 为 MM/DD/YYYY,120 为 YYYY-MM-DD HH:MI:SS)。这是报表展示中最常见的日期格式化手段。
系统与元数据函数
此类函数主要用于获取当前会话的环境信息或数据库对象的元数据,常用于权限控制和动态 SQL 构建。
第10步:用户身份与环境识别
Suser_name()/Suser_sname():返回当前 Windows 登录名或 SQL 登录名的安全标识符 SID 对应的用户名。User_name()/User:返回当前数据库用户的安全标识符对应的数据库用户名,常用于行级权限隔离。
第11步:数据库与对象信息检索
Db_name():返回当前连接所属的数据库名称,或根据 ID 返回数据库名。Object_name(obj_id):根据数据库对象 ID 返回对象名称(表、视图等)。Col_name(obj_id, col_id):返回指定表的列名。Col_length(objname, colname):返回指定列的定义长度(字节)。Valid_name(char_expr):验证字符串是否符合 SQL Server 标识符命名规则,若合法返回 1,否则返回 0,适用于动态生成表名或列名的安全检查。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









