我有一个列u_manualdoc,其中包含的值类似于此CGY DR# 7405
。我想删除CGY DR#
。
这是代码:
select u_manualdoc, cardcode, cardname from ODLN
我只想要7405
个号码。谢谢!
答案 0 :(得分:1)
试试这个:
--sample data you provided in comments
declare @tbl table(codes varchar(20))
insert into @tbl values
('CGY PST - 58277') , ('CGY RMC PST # 58083'), ('CGY DR # 7443'), ('CSI # 1304'), ('PO# 0568 , 0570'), ('CGY DR# 7446')
--actual query that you can apply to your table
select SUBSTRING(codes, PATINDEX('%[0-9]%', codes), len(codes)) from @tbl
这里的关键点是使用patindex
,它搜索模式并返回发生此类模式的索引。我指定了%[0-9]%
,这意味着我们搜索任何数字 - 它将返回第一次出现的数字。现在 - 因为这将是我们的子串的起点,我们将它传递给这样的函数。 substring
的第三个参数是长度。由于我们需要字符串的其余部分,len
函数确保我们得到它:)
申请您的命名:
select SUBSTRING(u_manualdoc, PATINDEX('%[0-9]%', u_manualdoc), len(u_manualdoc)),
cardcode,
cardname
from ODLN
答案 1 :(得分:1)
你应该使用字符串函数charindex,len和substring来获取它。 请参阅下面的代码。
Uri imageUri ;
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
{
imageUri = FileProvider.getUriForFile(context , context.getString(R.string.file_provider_authority), PDFFile);
}
else
{
imageUri = Uri.fromFile(PDFFile);
}
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_VIEW);
shareIntent.setDataAndType(imageUri , "application/pdf");
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
context.startActivity(shareIntent);
答案 2 :(得分:1)
修改强>
除了其他答案,你可以使用这个简单的方法:
select
substring(
u_manualdoc,
len(u_manualdoc) - patindex('%[^0-9]%', reverse(u_manualdoc)) + 2,
len(u_manualdoc)
),
cardcode, cardname
from ODLN
在此示例中,patindex
从字符串的右侧查找第一个非数字(由^[0-9]
指定),然后将其用作子字符串的起始点。
这适用于所有示例字符串(包括' PO#0568,0570 CGY DR#7446')。
或者使用SQL Server Regex,它可以让您在查询中使用更强大的正则表达式。
答案 3 :(得分:0)
尝试
DECLARE @table TABLE(DirtyCol VARCHAR(100));
INSERT INTO @table
VALUES('AB ABCDE # 123'), ('ABCDE# 123'), ('AB: ABC# 123 AB: ABC# 123'), ('AB#'), ('AB # 1 000 000'), ('AB # 1`234`567'), ('AB # (9)(876)(543)');
WITH tally
AS (
SELECT TOP (100) N = ROW_NUMBER() OVER(ORDER BY @@spid)
FROM sys.all_columns),
data
AS (
SELECT DirtyCol,
Col
FROM @table
CROSS APPLY
(
SELECT
(
SELECT C+''
FROM
(
SELECT N,
SUBSTRING(DirtyCol, N, 1) C
FROM tally
WHERE N <= DATALENGTH(DirtyCol)
) [1]
WHERE C BETWEEN '0' AND '9'
ORDER BY N FOR XML PATH('')
)
) p(Col)
WHERE p.Col IS NOT NULL)
SELECT DirtyCol,
CAST(Col AS INT) IntCol
FROM data;