点晴MIS内部交流论坛加入收藏
新手上路
论坛搜索
 您的位置:点晴MIS系统问题答疑『 经验分享&问题答疑 』浏览当前帖子  
登 陆注 册论坛帮助  

  网站搜索
  搜索范围: 搜索方式: 关键词(可用空格分开)  

  作者及文章信息: 本文热度:415 % 
admin

积分:72258
等级:网站管理员
文数:12859
注册:2004-7-20

 信息   留言   主页   编辑   引用    

楼 顶 

 如何在SQL Server中使用内置函数或创建自定义split等函数


SQLserver 中没有内置的split函数,需要自己构建一个表值函数,具体代码如下:

----------下面方法是以“,”来分割字符串
CREATE FUNCTION [dbo].[Split](@separator VARCHAR(64)=',',@string NVARCHAR(max))
  RETURNS @ResultTab TABLE (
     Id    INT ,
     Res     NVARCHAR(500) 
 )
 AS
 BEGIN
     DECLARE @Num INT
     
     IF(@string IS NOT NULL AND @string <> '' AND LEN(@string)>0)
     BEGIN
         IF(CHARINDEX(@separator,@string)>0)        --判断要截取的字符是否存在
         BEGIN
             SET @Num=0
             WHILE (CHARINDEX(@separator,@string)>0)        --如果要截取的字符存在,就继续循环
             BEGIN
                 SET @Num=@Num+1
                 
                 INSERT INTO @ResultTab(Id,Res)        --截取字符串,插入表变量
                 SELECT @Num,LEFT(@string,CHARINDEX(@separator,@string)-1)
                 
                 --把已经截取并插入的字符串删除
                 SET @string=STUFF(@string,1,CHARINDEX(@separator,@string)-1+LEN(@separator),'')    
             END
             
             --如果最后一个截取的字符串为空,那就不插入了
             --例如:'0123,0456,0789,' 这样的字符串最后剩下的就是空字符串了
             IF(@string IS NOT NULL AND @string <> '')
             BEGIN
                 INSERT INTO @ResultTab(Id,Res)
                 SELECT @Num+1,@string 
            END            
         END
         ELSE
         BEGIN
             INSERT INTO @ResultTab(Id,Res) SELECT 1,@string 
         END
     END
     ELSE
     BEGIN
         DELETE FROM @ResultTab
     END
     RETURN
 END

例如:使用“,”分割字符串 "001,002,003,004"
SQL语句:select * from [Split](',','001,002,003,004');

结果:


SQL 内置函数

函数的语法

内建 SQL 函数的语法是:

SELECT function(列) FROM 表

函数的类型

在 SQL 中,基本的函数类型和种类有若干种。函数的基本类型是:

  • Aggregate 函数
  • Scalar 函数

合计函数(Aggregate functions)

Aggregate 函数的操作面向一系列的值,并返回一个单一的值。

注释:如果在 SELECT 语句的项目列表中的众多其它表达式中使用 SELECT 语句,则这个 SELECT 必须使用 GROUP BY 语句!

"Persons" table (在大部分的例子中使用过)

NameAge
Adams, John38
Bush, George33
Carter, Thomas28

MS Access 中的合计函数

函数描述
AVG(column)返回某列的平均值
COUNT(column)返回某列的行数(不包括 NULL 值)
COUNT(*)返回被选行数
FIRST(column)返回在指定的域中第一个记录的值
LAST(column)返回在指定的域中最后一个记录的值
MAX(column)返回某列的最高值
MIN(column)返回某列的最低值
STDEV(column) 
STDEVP(column) 
SUM(column)返回某列的总和
VAR(column) 
VARP(column) 

在 SQL Server 中的合计函数

函数描述
AVG(column)返回某列的平均值
BINARY_CHECKSUM 
CHECKSUM 
CHECKSUM_AGG 
COUNT(column)返回某列的行数(不包括NULL值)
COUNT(*)返回被选行数
COUNT(DISTINCT column)返回相异结果的数目
FIRST(column)返回在指定的域中第一个记录的值(SQLServer2000 不支持)
LAST(column)返回在指定的域中最后一个记录的值(SQLServer2000 不支持)
MAX(column)返回某列的最高值
MIN(column)返回某列的最低值
STDEV(column) 
STDEVP(column) 
SUM(column)返回某列的总和
VAR(column) 
VARP(column) 

Scalar 函数

Scalar 函数的操作面向某个单一的值,并返回基于输入值的一个单一的值。

MS Access 中的 Scalar 函数

函数描述
UCASE(c)将某个域转换为大写
LCASE(c)将某个域转换为小写
MID(c,start[,end])从某个文本域提取字符
LEN(c)返回某个文本域的长度
INSTR(c,char)返回在某个文本域中指定字符的数值位置
LEFT(c,number_of_char)返回某个被请求的文本域的左侧部分
RIGHT(c,number_of_char)返回某个被请求的文本域的右侧部分
ROUND(c,decimals)对某个数值域进行指定小数位数的四舍五入
MOD(x,y)返回除法操作的余数
NOW()返回当前的系统日期
FORMAT(c,format)改变某个域的显示方式
DATEDIFF(d,date1,date2)用于执行日期计算

  离 线  2021/12/18 10:31:08 
  本文章共有 0 页, 0 张回文,每页有 10 张回文 >> [ ]
页码:
Copyright 2003-2022 ClickSun All Rights Reserved