51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3979|回复: 9
打印 上一主题 下一主题

数据库 几个常用的 操作 应用. 呵呵

[复制链接]
  • TA的每日心情

    2015-9-10 15:08
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2010-3-5 18:06:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    前言: 2天看到有朋友在问一个题目.一开始,都不知道怎么做,呵呵
    数据库中的函数太多了,记不住
    呵呵,后来翻了翻,找出来了.所以现在记录下来.免得以后又忘记了

    题目是注意的
    2个表
    其中一个表中有 1
    full_name . 现在要把这列中的数据
    以空格为界, 分割开来,进而
    插入到
    2个表中的
    first_name
    last name中去.


    seven1

    id     full_name     comments       entrydate
    1      bobo               哈哈         1905-6-12 0:00:00
    2      seven bobo   哈哈2               1905-6-12 0:00:00
    3      bill bobo         哈哈3               2009-1-20 0:00:00
    4      bill sayhi         哈哈4               2009-1-20 0:00:00

    seven2
    id  first_name    last_name   comments       entrydate
    1      bobo                                           1905-6-12 0:00:00
    2      seven bobo                                                             1905-6-12 0:00:00
    3      bill bobo                                            2009-1-20 0:00:00
    4      bill sayhi                                                                    2009-1-20 0:00:00

    这里会用到以下的
    语句:     select    substring(full_name,1,charindex(' ',full_name,1)) AS first_name  from seven1

    -- 首先 获取 full_name,空格的位置, 然后截取full_name, 从开始位置到空格位置的值,记为 first_name

    select      substring(full_name,CHARindex(' ',full_name,1)+1,len(full_name)) AS full_name FROM seven1

    -- 首先  获取 full_name,空格的位置, 然后截取full_name, 从空格位置的值+1 到字段的最后位置 ,记为 last_name .这里因为只有2部分,所以只需要判断一次空格.如果有多个空格.则需要多写几次这个命令了.

    --------------------------------------------命令解释!!!--------------------------------------------------------------------------

    -- charindex('关键字',字段,n) 获取字段中,从第n个位置开始算起遇到关键字时候的位置.并且返回 ,下面以空格为例.

    -- 比如 charindex(' ','222 3333 3333444 444',1) 获取第1个空格的位置
    ,
    最后的一个1 代表的意思为从起始位置算起
    -- SELECT charindex(' ','222 3333 3333444 444',1) 结果为4
    -- SELECT charindex(' ','222 3333 3333444 444',5) 结果为9
    -- SELECT charindex(' ','222 3333 3333444 444',6) 结果为9

    -- substring(字段,开始位置,截取数目) 这是从字段中,截取从开始位置开始到截取位置结束的内容,并且返回
    -- 比如 substring('222 3333 3333444 444',1,5)获取从第1个字符开始到5个结束的字段.

    -- select substring('222 3333 3333444 444',1,5)结果为'222 3'
    -- select substring('222 3333 3333444 444',1,6)结果为'222 33'
    -- select substring('222 3333 3333444 444',1,5)结果为'222 3'
    -- select substring('222 3333 3333444 444',0,5)结果为'222 '   注意 0
    -- select substring('222 3333 3333444 444',-1,5)结果为'222'   注意 -1   .前面的参数是可以为负数的.

    -- len(full_name) 获取字段的长度.
    -----------------------------------------------------------------------------------------------------------------------------


    好的,现在基本的分解工作完成了,下面就需要插入数据了..

    这里可以用2种方法来做

    1:直接更新(如果2张表不对行数做限制的话,因为这样插入 ,会增加行数!比如这个表为空表)

    INSERT INTO seven2(id,entrydate,comments,first_name,last_name)
    -- full
    为关键字
    ,
    所以要用"" 标识.
    SELECT id,entrydate,comments,
    substring(full_name,1,charindex(' ',full_name,1)),
    substring(full_name,CHARindex(' ',full_name,1)+1,len(full_name)) from seven1

    2: 间接的更新(如果第2个表有了一些数据,不希望更新而产生新数据,则用update 来做.)

    假设,seven1同上, seven2为空. 现在为了seven2要有数据, 所以先生成一些.

    1
    INSERT INTO seven2(id,entrydate,comments ) SELECT id,entrydate,comments    FROM seven1
    这个可以把2个对等的字段复制过来. 实现2表之间的复制.

    OK ,现在 seven1 seven2条数是相等的.此时,如果用1种方法 ,行数就会不相等了.

    2
    SELECT * FROM seven1 LEFT JOIN seven2 ON seven1.id=seven2.id
    这个可以实现2个表互联查看.结果为

    id full_name comments entrydate  id first_name last_name comments entrydate
    1 bobo  哈哈  1905-6-12 0:00:00 1     哈哈  1905-6-12 0:00:00
    2 seven bobo 哈哈2  1905-6-12 0:00:00 2     哈哈2  1905-6-12 0:00:00
    3 bill bobo 哈哈3  2009-1-20 0:00:00 3     哈哈3  2009-1-20 0:00:00
    4 bill sayhi 哈哈4  2009-1-20 0:00:00 4     哈哈4  2009-1-20 0:00:00



    3
    UPDATE seven2 SET first_name= substring(full_name,1,charindex(' ',full_name,1)),

    last_name = substring(full_name,CHARindex(' ',full_name,1)+1,len(full_name))

    FROM seven2
    LEFT JOIN seven1 ON seven2.id=seven1.id


    到此数据就这样更新好了...


    ps : 附带新建和插入数据的命令

    CREATE TABLE seven1 (
    id INT,
    first_name VARCHAR(40),
    last_name VARCHAR(40),
    comments TEXT,
    entrydate DATETIME
    );

    INSERT INTO seven1 VALUES (1,'bobo 阿七','boy','mei没什么写的','2010-03-04 18:00');

    [ 本帖最后由 阿七 于 2010-3-5 18:13 编辑 ]
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情

    2015-9-10 15:08
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    2#
     楼主| 发表于 2010-3-5 18:14:20 | 只看该作者
    晕哦  发上来  格式都变形了呀!!!


        
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3#
    发表于 2010-3-17 12:41:17 | 只看该作者
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4#
    发表于 2010-9-15 13:41:31 | 只看该作者

    不错

    不错,不错。呵呵
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
    发表于 2010-9-29 15:31:59 | 只看该作者
    我不评价
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-5-8 19:23
  • 签到天数: 137 天

    连续签到: 1 天

    [LV.7]测试师长

    6#
    发表于 2010-10-6 13:34:30 | 只看该作者
    看看帮助就会了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7#
    发表于 2010-10-12 11:20:35 | 只看该作者
    谢谢,又学了一招
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
    发表于 2010-11-8 14:56:57 | 只看该作者
    看着好像好难的样子
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
    发表于 2010-11-11 21:34:06 | 只看该作者
    不错,学习了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
    发表于 2011-1-17 09:34:14 | 只看该作者
    回复 2# 阿七
    -- 如select substring('222 3333 3333444 444',0,5)结果为'222 '   注意 0
    -- 如select substring('222 3333 3333444 444',-1,5)结果为'222'   注意 -1   .前面的参数是可以为负数的.
    请问这2条的结果是怎么得出来的啊?谢谢
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-9-21 02:43 , Processed in 0.086815 second(s), 27 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表