在MYSQL的SQL语句中截取字符串的函数SUBSTRING

   2023-02-09 学习力0
核心提示:返回字符、binary、text 或 image 表达式的一部分。有关可与该函数一起使用的有效 Microsoft® SQL Server™ 数据类型的更多信息,请参见数据类型。        语法SUBSTRING ( expression , start , length )   参数expression     是字符串、二

返回字符、binary、text 或 image 表达式的一部分。有关可与该函数一起使用的有效 Microsoft® SQL Server™ 数据类型的更多信息,请参见数据类型

       
语法
SUBSTRING ( expression , start , length )   
参数

expression     

是字符串、二进制字符串、text、image、列或包含列的表达式。不要使用包含聚合函数的表达式。  

start

是一个整数,指定子串的开始位置。

   

length

   

是一个整数,指定子串的长度(要返回的字符数或字节数)。     

说明   由于在 text 数据上使用 SUBSTRING 时 startlength 指定字节数,因此 DBCS 数据(如日本汉字)可能导致在结果的开始或结束位置拆分字符。此行为与 READTEXT 处理 DBCS 的方式一致。然而,由于偶而会出现奇怪的结果,建议对 DBCS 字符使用 ntext 而非 text。   

返回类型

如果 expression 是支持的字符数据类型,则返回字符数据。如果 expression 是支持的 binary 数据类型,则返回二进制数据。   

返回字符串的类型与给定表达式的类型相同(表中显示的除外)。       

给定的表达式 返回类型
text varchar
image varbinary
ntext nvarchar

     

注释

在字符数中必须指定使用 ntextchar varchar 数据类型的偏移量(start length)。在字节数中必须指定使用 textimagebinary varbinary 数据类型的偏移量。     

说明   兼容级别可能影响返回值。有关兼容级别的更多信息,请参见 sp_dbcmptlevel。  

示例
A. 在字符串上使用 SUBSTRING     

下例显示如何只返回字符串的一部分。该查询在一列中返回 authors 表中的姓氏,在另一列中返回 authors 表中的名字首字母。

USE pubs
     SELECT au_lname, SUBSTRING(au_fname, 1, 1)
     FROM authors
     ORDER BY au_lname
下面是结果集:
au_lname                                   
     ---------------------------------------- -
     Bennet                                    A
     Blotchet-Halls                            R
     Carson                                    C
     DeFrance                                  M
     del Castillo                              I
     ...
     Yokomoto                                  A
    
     (23 row(s) affected)
    

下例显示如何显示字符串常量 abcdef 中的第二个、第三个和第四个字符。

SELECT x = SUBSTRING('abcdef', 2, 3)
    
下面是结果集:
x
     ----------
     bcd
    
     (1 row(s) affected)
    
       
B. 在 text、ntext 和 image 数据上使用 SUBSTRING
       

下例显示如何从 pubs 数据库的 publishers 表内的每个 textimage 数据列中返回前 200 个字符。text 数据以 varchar 的形式返回,image 数据则以 varbinary 的形式返回。

USE pubs
     SELECT pub_id, SUBSTRING(logo, 1, 10) AS logo,
        SUBSTRING(pr_info, 1, 10) AS pr_info
     FROM pub_info
     WHERE pub_id = '1756'   

下面是结果集:

pub_id logo                    pr_info    
     ------ ---------------------- ----------
     1756    0x474946383961E3002500 This is sa
    
     (1 row(s) affected)
        

下例显示 SUBSTRING 在 text ntext 数据上的效果。首先,下例在 pubs 数据库内创建一个名为 npr_info 的新表。然后,在 npr_info 表中用 pub_info.pr_info 列的前 80 个字符创建 pr_info 列,并添加ü作为首字符。最后,INNER JOIN 检索所有出版商标识号以及 text ntext 出版商信息列的 SUBSTRING。

IF EXISTS (SELECT table_name FROM INFORMATION_SCHEMA.TABLES
           WHERE table_name = 'npub_info')
        DROP TABLE npub_info
     GO
     -- Create npub_info table in pubs database. Borrowed from instpubs.sql.
     USE pubs
     GO
     CREATE TABLE npub_info
     (
      pub_id          char(4)            NOT NULL
              REFERENCES publishers(pub_id)
              CONSTRAINT UPKCL_npubinfo PRIMARY KEY CLUSTERED,
      pr_info         ntext              NULL
     )
    
     GO
    
     -- Fill the pr_info column in npub_info with international data.
     RAISERROR('Now at the inserts to pub_info...',0,1)
    
     GO
    
     INSERT npub_info VALUES('0736', N'üThis is sample text data for New Moon Books, publisher 0736 in the pubs database')
     INSERT npub_info values('0877', N'üThis is sample text data for Binnet & Hardley, publisher 0877 in the pubs databa')
     INSERT npub_info values('1389', N'üThis is sample text data for Algodata Infosystems, publisher 1389 in the pubs da')
     INSERT npub_info values('9952', N'üThis is sample text data for Scootney Books, publisher 9952 in the pubs database')
     INSERT npub_info values('1622', N'üThis is sample text data for Five Lakes Publishing, publisher 1622 in the pubs d')
     INSERT npub_info values('1756', N'üThis is sample text data for Ramona Publishers, publisher 1756 in the pubs datab')
     INSERT npub_info values('9901', N'üThis is sample text data for GGG&G, publisher 9901 in the pubs database. GGG&G i')
     INSERT npub_info values('9999', N'üThis is sample text data for Lucerne Publishing, publisher 9999 in the pubs data')
     GO
     -- Join between npub_info and pub_info on pub_id.
     SELECT pr.pub_id, SUBSTRING(pr.pr_info, 1, 35) AS pr_info,
        SUBSTRING(npr.pr_info, 1, 35) AS npr_info
     FROM pub_info pr INNER JOIN npub_info npr
        ON pr.pub_id = npr.pub_id
     ORDER BY pr.pub_id ASC
    
     select SUBSTRING(date_entered,1,4)   as a from tb_area_collect   group by SUBSTRING(date_entered,1,4)
 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • sql:mysql:函数:TIMESTAMPDIFF函数实现TimeStamp字段相减,求得时间差
    sql:mysql:函数:TIMESTAMPDIFF函数实现TimeS
     函数内指定是minute,则最终结果value值的单位是分钟,如果函数内指定为hours,则最终结果value值单位为小时。//UPLOAD_TIME 减去 CREATE_DTTM 求得时间差,以分钟数计时select avg(TIMESTAMPDIFF(MINUTE,CREATE_DTTM,UPLOAD_TIME)) value,LEFT(CREATE_DTTM
    03-08
  • 去重复的sql(Oracle) 去重复的英文
    1.利用group by 去重复2.可以利用下面的sql去重复,如下  1) select id,name,sex from (select a.*,row_number() over(partition by a.id,a.set order by name) su from test a ) where su=1  2)select id,name,sex from (select a.*,row_number() over(p
    02-10
  • Oracle SQL七次提速技巧
    以下SQL执行时间按序号递减。1,动态SQL,没有绑定变量,每次执行都做硬解析操作,占用较大的共享池空间,若共享池空间不足,会导致其他SQL语句的解析信息被挤出共享池。create or replace procedure proc1as beginfor i in 1..100000 loop    execute imme
    02-10
  • Oracle\SQL  Server等及其他基本语句写法
    Oracle\SQL Server等及其他基本语句写法
    Oracle\SQL  Server等及其他基本语句写法目录一.Excel相关 11.Excel中写脚本范例: 12.提取字节 23. 提取单元格内字符 24.VLOOKUP函数: 2二.SQL语句汇总 21.建表: 22.增 33.删 44.查 65.改 236.Alter的应用 24三.数据库备份与恢复脚本 261. Oracle: 2
    02-10
  • SQL ORACLE case when函数用法
    case when 用法(1)简单case函数:格式:  case 列名   when 条件值1 then 选项1  when 条件值1 then 选项2......  else 默认值 end例如:  select   case job_level  when '1' then '1111'  when '2' then '2222'   when '3' then '3333
    02-10
  • mysql下如何执行sql脚本 执行SQL脚本
    1.编写sql脚本,假设内容如下:  create database dearabao;  use dearabao;  create table niuzi (name varchar(20));  保存脚本文件,假设我把它保存在F盘的hello world目录下,于是该文件的路径为:F:\hello world\niuzi.sql2.执行sql脚本,可以有2种方法: 
    02-10
  • MySQL 5.7版本sql_mode=only_full_group_by问题
    用到GROUP BY 语句查询时com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'col_user_6.a.START_TIME' which is not functionally dependent on colu
    02-10
  • Oracle迁移到MySQL性能下降的注意点 oracle数据
    背景:最近有较多的客户系统由原来由Oracle改造到MySQL后出现了性能问题CPU 100%,或是后台的CRM系统复杂SQL在业务高峰的时候出现堆积导致业务故障。在我的记忆里面淘宝最初从Oracle迁移到MySQL期间也遇到了很多SQL的性能问题,记忆最为深刻的子查询,当初的
    02-10
  • ORACLE中通过SQL语句(alter table)来增加、删除
    1.添加字段:alter table  表名  add (字段  字段类型)  [ default  '输入默认值']  [null/not null]  ;2.添加备注:comment on column  库名.表名.字段名 is  '输入的备注';  如: 我要在ers_data库中  test表 document_type字段添加备注  comm
    02-10
  • MySQL与Oracle 差异比较之六触发器
    触发器编号类别ORACLEMYSQL注释1创建触发器语句不同create or replace trigger TG_ES_FAC_UNIT  before insert or update or delete on ES_FAC_UNIT  for each rowcreate trigger `hs_esbs`.`TG_INSERT_ES_FAC_UNIT` BEFORE INSERT on `hs_esbs`.`es_fac_u
    02-10
点击排行