在未授权使用更新函数的情况下,如何删除SQL中varchar列开头和结尾的字母
我在SQL中有一个在未授权使用更新函数的情况下,如何删除SQL中varchar列开头和结尾的字母,sql,sql-server,tsql,Sql,Sql Server,Tsql,我在SQL中有一个varchar(20)列,其中包含一些在值的开头和/或结尾带有字母的值(即AD5376276或AD574638BD或324523BD) 我希望在此列中删除这些值中的任何字母,以便结果仅为数字字符值。我正在用SQL做这件事 我一直在尝试SQL中类似的东西 SELECT LTRIM('%[a-z]%', txn.transaction_number) RTRIM(txn.transaction_number, '%[a-z]%') FROM arrt.
varchar(20)
列,其中包含一些在值的开头和/或结尾带有字母的值(即AD5376276或AD574638BD或324523BD)
我希望在此列中删除这些值中的任何字母,以便结果仅为数字字符值。我正在用SQL做这件事
我一直在尝试SQL中类似的东西
SELECT
LTRIM('%[a-z]%', txn.transaction_number)
RTRIM(txn.transaction_number, '%[a-z]%')
FROM
arrt.tblAgingTransactionDetail_DailyR txn;
谢谢 假设您使用的是Sql Server 2008,请检查以下示例,您正在寻找LEFT、PATINDEX和SUBSTRING函数的正确用法:
DECLARE @value NVARCHAR(30)
SET @value = 'QWE SAGQER #%&*| 123'
SELECT LEFT(SUBSTRING(@value, PATINDEX('%[0-9.-]%', @value), 8000),
PATINDEX('%[^0-9.-]%', SUBSTRING(@value, PATINDEX('%[0-9.-]%', @value), 8000) + 'X') -1)
有关更多示例:正则表达式可能会有所帮助。这是一个Oracle示例(因为您没有指定数据库),因此可能需要对其进行调整
SQL> with test (col) as
2 (select 'AD5376276' from dual union
3 select 'AD574638BD' from dual union
4 select '324523BD' from dual
5 )
6 select col, regexp_substr(col, '\d+') result
7 from test;
COL RESULT
---------- ----------
324523BD 324523
AD5376276 5376276
AD574638BD 574638
SQL>
谢谢你对我有耐心,因为这是我第一次发帖 我使用的最终代码如下所示:
SELECT LEFT(SUBSTRING(transaction_number, PATINDEX('%[0-9.-]%', transaction_number), 8000),
PATINDEX('%[^0-9.-]%', SUBSTRING(transaction_number,
PATINDEX('%[0-9.-]%', Transaction_Number), 8000) + 'X') -1) AS transaction_number
请为您使用的特定数据库平台编辑和添加标记。是否总是只有两个字母在开头?结尾?哪个数据库管理系统??????对于不同的dbms,语法是不同的。这是针对SSMS的。在某些情况下,值为的开头和/或结尾处有1-3个字符。Microsoft SQL Server 2014Thanks!这成功了!我最后的代码是这样的:@Trent非常欢迎你!如果您可以选择“正确答案”,然后单击左侧的“勾选”,我将不胜感激。谢谢。我对你的答案投了赞成票,但在我的声誉超过15分之前,它不会注册。谢谢你!