SQL Server中的函数<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
• 字符串函数
• 日期函数
• 数学函数
• 系统函数
这些都相当于C语言中的内部函数,我们来一个一个看:
字符串函数
日期函数
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
SELECT DATEPART(day, '<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />01/15/2000') 返回:15 |
日期中指定日期部分的整数形式 |
DATEPART |
SELECT GETDATE() 返回:今天的日期 |
取得当前的系统日期 |
GETDATE |
举例 |
描述 |
函数名 |
SELECT DATEADD(mm,4,’01/01/99’) 返回:以当前的日期格式返回05/01/99 |
将指定的数值添加到指定的日期部分后的日期 |
DATEADD |
SELECT DATEDIFF(mm,‘07/01/99’,‘11/01/99’) 返回:4 |
两个日期之间的指定日期部分的区别 |
DATEDIFF |
SELECT DATENAME(dw,'01/01/2000') 返回:Saturday |
日期中指定日期部分的字符串形式 |
DATENAME |
数学函数
SELECT SQRT(9) 返回:3 |
取浮点表达式的平方根 |
Sqrt |
SELECT ABS(-43) 返回:43 |
取数值表达式的绝对值 |
ABS |
举例 |
描述 |
函数名 |
SELECT CEILING(43.5) 返回:44 |
返回大于或等于所给数字表达式的最小整数 |
CEILING |
SELECT POWER(5,2) 返回:25 |
取数值表达式的幂值 |
POWER |
SELECT ROUND(43.543,1) 返回:43.5 |
将数值表达式四舍五入为指定精度 |
ROUND |
SELECT SIGN(-43) 返回:-1 |
对于正数返回+1,对于负数返回-1,对于0 则返回0 |
Sign |
SELECT FLOOR(43.5) 返回:43 |
取小于或等于指定表达式的最大整数 |
FLOOR |
系统函数
SELECT USER_NAME(1) 返回:从任意数据库中返回“dbo” |
从给定的用户I D返回用户名 |
USER_NAME |
SELECT CONVERT (VARCHAR (5),12345) 返回:字符串12345 |
用来转变数据类型 |
CONVERT |
举例 |
描述 |
函数名 |
SELECT CURRENT_USER 返回:你登录的用户名 |
返回当前用户的名字 |
CURRENT_USER |
SELECT DATALENGTH ('中国A盟') 返回:7 |
返回用于指定表达式的字节数 |
DATALENGTH |
SELECT HOST_NAME() 返回:你所登录的计算机的名字 |
返回当前用户所登录的计算机名字 |
HOST_NAME |
SELECT SYSTEM_USER 返回:你当前所登录的用户名 |
返回当前所登录的用户名称 |
SYSTEM_USER |
案例分析1—要求
• 某公司印了一批充值卡,卡的密码是随机生成的,现在出现这个问题:
卡里面的“O和0”(哦和零)“i和1”(哎和一),用户反映说看不清楚,公司决定,把存储在数据库中的密码中所有的“哦”都改成“零”,把所有的“i”都改成“1”;
请编写SQL语句实现以上要求;
• 数据库表名:Card;密码字段名:PassWord;
案例分析1—分析
• 这是更新语句,需要使用UPDATE语句;
• 因为牵涉到字符串的替换,需要使用到SQL Server中的函数Replace;
案例分析1—T-SQL
两行SQL语句
Update Card Set PassWord = Replace(PassWord,'O','0')
Update Card Set PassWord = Replace(PassWord,'i','1')
一行SQL语句
Update Card
Set PassWord = Replace(Replace(PassWord,'O','0'),'i','1')
案例分析2—要求
• 在数据库表中有以下字符数据,如:
13-1、13-2、13-3、13-10、13-100、13-108、13-18、13-11、13-15、14-1、14-2
现在希望通过SQL语句进行排序,并且首先要按照前半部分的数字进行排序,然后再按照后半部分的数字进行排需,输出要排成这样:
13-1、13-2、13-3、13-10、13-11、13-15、13-18、13-100、13-108、14-1、14-2
• 数据库表名:SellRecord;字段名:ListNumber;
案例分析2—分析
• 这是查询语句,需要使用SELECT语句
• 需要使用到ORDER BY进行排序,并且在ORDER BY的排序列中,也需要重新计算出排序的数字来
• 前半部分的数字,可以从先找到“-”符号的位置,然后,取其左半部分,最后再使用Convert函数将其转换为数字:
Convert(int, Left(ListNumber, CharIndex('-', ListNumber)-1))
• 后半部分的数字,可以先找到“-”符号的位置,然后把从第一个位置到该位置的全部字符替换为空格,最后再使用Convert函数将其转换为数字:
案例分析2—T-SQL
Convert(int, Stuff(ListNumber,1, Charindex('-', ListNumber), ''))
SELECT ListNumber
FROM SellRecord
ORDER BY
Convert(int, Left(ListNumber, CharIndex('-', ListNumber)-1)),
Convert(int, Stuff(ListNumber,1, Charindex('-', ListNumber), ''))
当然,还有其他的计算出排序列的方法,大家可以自己思考一下。