mysql substring

本文详细介绍了SQL中的SUBSTRING和REPLACE函数的使用方法。SUBSTRING用于获取字符串的一部分,包括其语法、参数及返回类型等;REPLACE函数用于在字符串中替换指定的文本。文中还提供了丰富的示例来帮助理解这些函数的具体应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


substring:

语法
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
注释

在字符数中必须指定使用ntextcharvarchar 数据类型的偏移量(startlength )。在字节数中必须指定使用textimagebinaryvarbinary 数据类型的偏移量。

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

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

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

USEpubs
SELECTau_lname,SUBSTRING(au_fname,1,1)
FROMauthors
ORDERBYau_lname
下面是结果集:
au_lname
-----------------------------------------
BennetA
Blotchet-HallsR
CarsonC
DeFranceM
delCastilloI
...
YokomotoA

(23row(s)affected)

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

SELECTx=SUBSTRING('abcdef',2,3)
下面是结果集:
x
----------
bcd

(1row(s)affected)
B.在text、ntext和image数据上使用SUBSTRING

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

USEpubs
SELECTpub_id,SUBSTRING(logo,1,10)ASlogo,
SUBSTRING(pr_info,1,10)ASpr_info
FROMpub_info
WHEREpub_id='1756'

下面是结果集:

pub_idlogopr_info
--------------------------------------
17560x474946383961E3002500Thisissa

(1row(s)affected)

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

IFEXISTS(SELECTtable_nameFROMINFORMATION_SCHEMA.TABLES
WHEREtable_name='npub_info')
DROPTABLEnpub_info
GO
--Createnpub_infotableinpubsdatabase.Borrowedfrominstpubs.sql.
USEpubs
GO
CREATETABLEnpub_info
(
pub_idchar(4)NOTNULL
REFERENCESpublishers(pub_id)
CONSTRAINTUPKCL_npubinfoPRIMARYKEYCLUSTERED,
pr_infontextNULL
)

GO

--Fillthepr_infocolumninnpub_infowithinternationaldata.
RAISERROR('Nowattheinsertstopub_info...',0,1)

GO

INSERTnpub_infoVALUES('0736',N'
üThisissampletextdataforNewMoonBooks,publisher0736inthepubsdatabase')
INSERTnpub_infovalues('0877',N'
üThisissampletextdataforBinnet&Hardley,publisher0877inthepubsdataba')
INSERTnpub_infovalues('1389',N'
üThisissampletextdataforAlgodataInfosystems,publisher1389inthepubsda')
INSERTnpub_infovalues('9952',N'
üThisissampletextdataforScootneyBooks,publisher9952inthepubsdatabase')
INSERTnpub_infovalues('1622',N'
üThisissampletextdataforFiveLakesPublishing,publisher1622inthepubsd')
INSERTnpub_infovalues('1756',N'
üThisissampletextdataforRamonaPublishers,publisher1756inthepubsdatab')
INSERTnpub_infovalues('9901',N'
üThisissampletextdataforGGG&G,publisher9901inthepubsdatabase.GGG&Gi')
INSERTnpub_infovalues('9999',N'
üThisissampletextdataforLucernePublishing,publisher9999inthepubsdata')
GO
--Joinbetweennpub_infoandpub_infoonpub_id.
SELECTpr.pub_id,SUBSTRING(pr.pr_info,1,35)ASpr_info,
SUBSTRING(npr.pr_info,1,35)ASnpr_info
FROMpub_infoprINNERJOINnpub_infonpr
ONpr.pub_id=npr.pub_id
ORDERBYpr.pub_idASC

selectSUBSTRING(date_entered,1,4)asafromtb_area_collectgroupbySUBSTRING(date_entered,1,4)

From:

http://hi.baidu.com/qk31/blog/item/ca1dd11b3a69ebd5ad6e75c5.html

------------------------------------------------------

replace:

遇到想替换数据库里某一字段的内容时可以用REPLACE函数:

语法如下:
UPDATE tb1 SET f1=REPLACE(f1, 'abc', 'def');

REPLACE(str,from_str,to_str)
在字符串 str 中所有出现的字符串 from_str 均被 to_str替换,然后返回这个字符串:
mysql>selectREPLACE('www.mysql.com', 'w', 'Ww');
-> 'WwWwWw.mysql.com'
这个函数是多字节安全的。

示例:
UPDATE `dede_addonarticle` SET body = REPLACE ( body,
'</td>',
'' );
UPDATE `dede_addonarticle` SET body = REPLACE ( body,
'</tr>',
'' );
UPDATE `dede_addonarticle` SET body = REPLACE ( body,
'<tr>',
'' );
UPDATE `dede_archives` SET title= REPLACE ( title,
'大洋新闻 - ',
'' );
UPDATE `dede_addonarticle` SET body = REPLACE ( body,
'../../../../../../',
'http://special.dayoo.com/meal/' );

mysql replace

用法1.replace into

replace into table (id,name) values(‘1‘,‘aa‘),(‘2‘,‘bb‘)
此语句的作用是向表table中插入两条记录。
2.replace(object, search,replace)
把object中出现search的全部替换为replaceselect replace(‘www.webjx.com‘,‘w‘,‘Ww‘)--->WwW wWw.webjx.com

例:把表table中的name字段中的 aa替换为bbupdate table set name=replace(name,‘aa‘,‘bb‘)

From:

http://www.jcwcn.com/article/2008/0730/mysql_30777.html

ps:自我测试:

例如,数据库中存在如下字段数据

open_date

10 1 1993 12:00AM

2001年

2003-10-1

.......

----

如果想把上面字段数据改为只含年份,即如:1993,则,写法如下:

UPDATE table SET open_date=REPLACE(open_date,open_date,SUBSTRING(open_date,7,4)) WHERE open_dateLIKE "%am"

其他如下:

10 1 1993 12:00AM (%am)

2001年 ("%年")

2003-10-1 ("%-%-%")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值