在未授权使用更新函数的情况下,如何删除SQL中varchar列开头和结尾的字母

在未授权使用更新函数的情况下,如何删除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.

我在SQL中有一个
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分之前,它不会注册。谢谢你!