zoukankan      html  css  js  c++  java
  • 有规律字段的拆分

    在很多的时候,我们会经常遇到将数据库的某一个字段拆分的问题,当然前提条件是字段的信息是有规律的,比如说一个字段存在 这样的信息“AAAAA,BBBBB,CCCCC,ZZZZ,TTTT”,需要你将其根据“,”分开后,然后将所有数据放入另外一个表中。
    其实这就是一个典型的CharIndex函数的应用。
    我们先看看联机帮助怎么说的:
    以下来自联机帮助
    CHARINDEX
    返回字符串中指定表达式的起始位置。

    语法
    CHARINDEX ( e­xpression1 , e­xpression2 [ , start_location ] )

    参数
    e­xpression1

    一个表达式,其中包含要寻找的字符的次序。e­xpression1 是一个短字符数据类型分类的表达式。

    e­xpression2

    一个表达式,通常是一个用于搜索指定序列的列。e­xpression2 属于字符串数据类型分类。

    start_location

    在 e­xpression2 中搜索 e­xpression1 时的起始字符位置。如果没有给定 start_location,而是一个负数或零,则将从 e­xpression2 的起始位置开始搜索。

    返回类型
    int

    注释
    如果 e­xpression1 或 e­xpression2 之一属于 Unicode 数据类型(nvarchar 或 nchar)而另一个不属于,则将另一个转换为 Unicode 数据类型。

    如 果 e­xpression1 或 e­xpression2 之一为 NULL 值,则当数据库兼容级别为 70 或更大时,CHARINDEX 返回 NULL 值。当数据库兼容级别为 65 或更小时,CHARINDEX 仅在 e­xpression1 和 e­xpression2 都为 NULL 时返回 NULL 值。

    如果在 e­xpression2 内没有找到 e­xpression1,则 CHARINDEX 返回 0。

    示例
    第 一个代码示例返回序列”wonderful”在 titles 表的 notes 列中开始的位置。第二个示例使用可选的 start_location 参数从 notes 列的第五个字符开始寻找”wonderful”。第三个示例显示了当 e­xpression2 内找不到 e­xpression1 时的结果集。

    USE pubs
    GO
    Select CHARINDEX(‘wonderful’, notes)
    FROM titles
    Where title_id = ‘TC3218′
    GO

    – Use the optional start_location parameter to start searching
    – for wonderful starting with the fifth character in the notes
    – column.
    USE pubs
    GO
    Select CHARINDEX(‘wonderful’, notes, 5)
    FROM titles
    Where title_id = ‘TC3218′
    GO

    下面是第一个查询和第二个查询的结果集:

    ———–
    46

    (1 row(s) affected)

    USE pubs
    GO
    Select CHARINDEX(‘wondrous’, notes)
    FROM titles
    Where title_id=’TC3218′
    GO

    下面是结果集。
    ———–
    0

    (1 row(s) affected)

    联机帮助结束
    通过上述的内容可以看出charindex函数的基本用法,我们在通过charindex函数来处理我们的问题:

    declare @LongString varchar(50)
    declare @FirstChar varchar(50)
    declare @FirstPoint int
    declare @lenth int

    set @LongString=’AAAAA,BBBBB,CCCCC,ZZZZ,TTTT’  —-可以是某一个表的字段信息
    set @lenth=len(@LongString)
    create  table #Temp_String(FID int identity,Content varchar(50))
    set @FirstPoint=charindex(‘,’,@LongString)

    while( @FirstPoint>0)
    begin
    set @FirstChar=substring(@LongString,0,@FirstPoint)
    insert into #Temp_String(Content) values (@FirstChar)
    set @LongString=substring(@LongString,@FirstPoint+1,@lenth)
    set @FirstPoint=charindex(‘,’,@LongString)
    end

    insert into #Temp_String(Content) values (@LongString)
    select * from #Temp_String
    drop table #Temp_String

    结果显示:
    FID Content
    1   AAAAA
    2   BBBBB
    3   CCCCC
    4   ZZZZ
    5   TTTT
    从而完成了我们的操作,当然你可以将其改为函数,需要注意的是在函数中不能使用临时表。

  • 相关阅读:
    ASP.NET通过更改Url进行页面传值
    ASP.NET通过更改Url进行页面传值
    Java实现 蓝桥杯 算法提高 八数码(BFS)
    Java实现 蓝桥杯 算法提高 八数码(BFS)
    Java实现 蓝桥杯 算法提高 八数码(BFS)
    数千台服务器,千万用户量:居然之家两年云原生改造历程
    云原生生态周报 Vol. 15 | K8s 安全审计报告发布
    初探云原生应用管理之:聊聊 Tekton 项目
    Knative 基本功能深入剖析:Knative Serving 之服务路由管理
    阿里云 CDN 业务基于边缘容器的云原生转型实践
  • 原文地址:https://www.cnblogs.com/Gaojier/p/2783610.html
Copyright © 2011-2022 走看看