Tạo một hàm:
CREATE FUNCTION dbo.StripNonAlphaNumerics
(
@s VARCHAR(255)
)
RETURNS VARCHAR(255)
AS
BEGIN
DECLARE @p INT = 1, @n VARCHAR(255) = '';
WHILE @p <= LEN(@s)
BEGIN
IF SUBSTRING(@s, @p, 1) LIKE '[A-Za-z0-9]'
BEGIN
SET @n += SUBSTRING(@s, @p, 1);
END
SET @p += 1;
END
RETURN(@n);
END
GO
Sau đó:
SELECT Result = dbo.StripNonAlphaNumerics
('My Customer''s dog & #1 friend are dope, yo!');
Kết quả:
Result
------
MyCustomersdog1friendaredopeyo
Để làm cho nó nhiều hơn linh hoạt, bạn có thể vượt qua trong mẫu y ou muốn cho phép:
CREATE FUNCTION dbo.StripNonAlphaNumerics
(
@s VARCHAR(255),
@pattern VARCHAR(255)
)
RETURNS VARCHAR(255)
AS
BEGIN
DECLARE @p INT = 1, @n VARCHAR(255) = '';
WHILE @p <= LEN(@s)
BEGIN
IF SUBSTRING(@s, @p, 1) LIKE @pattern
BEGIN
SET @n += SUBSTRING(@s, @p, 1);
END
SET @p += 1;
END
RETURN(@n);
END
GO
Sau đó:
SELECT r = dbo.StripNonAlphaNumerics
('Bob''s dog & #1 friend are dope, yo!', '[A-Za-z0-9]');
Kết quả:
r
------
Bobsdog1friendaredopeyo
Nguồn
2012-03-09 15:10:50
Tôi thấy mọi người đang giới thiệu chức năng. \t Tôi thích ý tưởng sử dụng một hàm do người dùng định nghĩa, nhưng sau đó nó phải trải qua điều khiển thay đổi để đến môi trường sản xuất. Không có cách nào để có một chức năng trực tuyến trong truy vấn, phải không? Tôi không chắc chắn ngôn ngữ họ đang sử dụng để gọi truy vấn SQL, có thể là VBScript hoặc Powershell, nhưng bây giờ tôi nghĩ rằng nó sẽ dễ dàng hơn nhiều để thực hiện việc tước bỏ ngôn ngữ đó. – NealWalters
Giống như một bảng số hoặc bảng lịch, hoặc các chức năng tách hoặc nối chuỗi, một chức năng có thể làm loại điều này là một mô-đun tiện dụng để có xung quanh. Ngay cả khi nó không đến đó ngay lập tức, bạn nên xem xét việc có những thứ này trong một cơ sở dữ liệu tiện ích. Tôi không biết rằng việc thực hiện điều này trong mã luôn luôn là câu trả lời hay nhất, đặc biệt nếu nhiều ứng dụng khác nhau cần làm điều tương tự ... –
@ Alex K., tôi thích giải pháp này tốt hơn so với của riêng tôi. Tôi không bao giờ phải kiểm tra chuỗi ký tự một lần.Bạn có cách nào để thay thế các khoảng trống thừa và các ký tự đặc biệt (cr/lf, tab) không? – datagod