SQL 截取字符串(转)

本文介绍了一种通过SQL函数处理文件路径字符串的方法,演示了如何截取路径的不同部分,包括驱动器、目录及文件名等。

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

 

字段A=’F:\photo\Winter Leaves.jpg’
要求:分段截取每段字符[字段A不能为TEXT类型,否则报错]
解决方法:

---截取字符串A的第一个\左边的字符串
select left(A,charindex(’/’,A)-1)
输出结果:F:

---截取\中间的字符串
select left(stuff(A,1,charindex(’/’,A),’’),charindex(’/’,stuff(A,1,charindex(’/’,A),’’))-1)
输出结果:photo

---截取最后一个\后面的字符串
select reverse(left(reverse(A),charindex(’/’,reverse(A))-1))
输出结果:Winter Leaves.jpg

---截取字符串A的首字幕
select STUFF(A,1, 1, ’’)
输出结果::\photo\Winter Leaves.jpg

### SQL Server中将截取字符串换为日期格式 在SQL Server环境中,当处理存储为字符串形式的日期数据并希望将其换为标准日期格式时,可以采用多种方法实现这一目标。对于特定于出生日期为年龄的情况,描述了一种涉及`to_char`、`to_timestamp`以及`age`和`EXTRACT`函数的方法[^3];不过需要注意的是这些函数名更常见于PostgreSQL而非SQL Server,在SQL Server里应当使用不同的内置函数。 为了适应SQL Server环境下的操作需求,通常会利用`CONVERT()`或`CAST()`函数来进行类型换,并且可能还需要配合诸如`SUBSTRING()`之类的字符串处理函数来精确提所需部分。如果原始字符串严格遵循某种可预测模式(比如'YYYY-MM-DD'),则可以直接尝试如下方式: ```sql SELECT CONVERT(DATE, '1980-07-25', 23) AS BirthDate; -- 或者使用 CAST 函数 SELECT CAST('1980-07-25' AS DATE) AS BirthDate; ``` 然而,当面对更加复杂或者不固定的输入格式时,则需先通过正则表达式或其他手段清理和标准化输入再做进一步处理。另外值得注意的一点是在某些情况下可能会遇到由于区域设置差异引起的问题,这时可以通过指定样式参数确保解析准确性。 假设有一个包含混合格式生日记录的数据列,其中一部分是以短横线分隔的日/月/年顺序表示法(DD-MM-YY)。在这种情形下,除了基本类型的换外,还需考虑调整字段内字符的位置使之匹配预期的标准格式: ```sql DECLARE @DateString NVARCHAR(50); SET @DateString = '25-07-80'; WITH CleanedData AS ( SELECT SUBSTRING(@DateString, PATINDEX('%[0-9][0-9]-%', @DateString), LEN(@DateString)) As FormattedString -- 清除任何潜在干扰符 ), ReorderedParts AS( SELECT RIGHT(FormattedString, 2)+'-'+LEFT(RIGHT(FormattedString, 5), 2)+'-'+'19'+LEFT(FormattedString, 2) as ReversedFormat FROM CleanedData -- 假设世纪固定为19xx年代 ) SELECT CONVERT(DATETIME, ReversedFormat, 23) AS CorrectedBirthdate FROM ReorderedParts; ``` 上述例子展示了如何针对特殊场景定制解决方案的过程,实际应用过程中应根据具体业务逻辑灵活调整策略以满足不同情况的要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值