2015-05-06 14 views
6

Tôi không thể thay thế một ký tự đặc biệt. Xin vui lòng giúp tôi về điều này.Máy chủ sql thay thế ký tự đặc biệt bằng null

đầu vào của tôi là:

Mrs঩Montero 

sản lượng nên là:

Mrs Montero 

nhân vật đặc biệt không được hiển thị một cách chính xác. xin vui lòng xem hình dưới đây. http://i.stack.imgur.com/b2SdY.jpg

+0

bạn đã thử làm gì? –

+0

bạn có thể viết một hàm sql loại bỏ tất cả các giá trị không phải ký tự (hoặc bạn có cần số không?) –

+2

Tại sao netezza được gắn thẻ này? –

Trả lời

1

Từ source bạn có thể tạo một hàm như thế này:

create function dbo.RemoveSpecialChars (@s varchar(256)) returns varchar(256) 
    with schemabinding 
begin 
    if @s is null 
     return null 
    declare @s2 varchar(256) 
    set @s2 = '' 
    declare @l int 
    set @l = len(@s) 
    declare @p int 
    set @p = 1 
    while @p <= @l begin 
     declare @c int 
     set @c = ascii(substring(@s, @p, 1)) 
     if @c between 48 and 57 or @c between 65 and 90 or @c between 97 and 122 
     set @s2 = @s2 + char(@c) 
     set @p = @p + 1 
     end 
    if len(@s2) = 0 
     return null 
    return @s2 
    end 

SQL FIDDLE DEMO

Và nếu bạn có chỉ là ký tự đặc biệt thì bạn có thể sử dụng này:

SELECT replace('Mrs঩Montero', '঩', ' ') 

SQL FIDDLE DEMO

+0

Mặc dù mã bạn sao chép/dán sẽ xóa các ký tự đặc biệt, nó cũng sẽ xóa các ký tự như dấu gạch ngang '-', ký tự hợp lệ trong tên được gạch nối, vì vậy có thể không phải là giải pháp tốt nhất. Mã bạn đã sao chép chỉ xóa mọi thứ không phải là A-Z hoặc 0-9. Tôi nghĩ rằng nó cũng sẽ loại bỏ không gian, mà tôi đoán sẽ không được mong muốn – Tanner

+0

@Tanner: - Thật vậy, tôi đoán để có được giải pháp chung OP phải thêm một số phạm vi hơn và kiểm tra để thoát khỏi những ký tự đặc biệt như dấu gạch nối. Khác nếu có một số ký tự đặc biệt cụ thể thì sử dụng hàm 'replace' cũng tốt. –

2

Nếu bạn chỉ cần chọn sau đó làm:

Select Replace(textct, Special_char, ' ') 
from mytable 

Nếu bạn đang cập nhật sau đó làm điều này:

Update mytable 
Set textct = Replace(textct, Special_char, ' ') 

Giả sử đây là những nvarchars sau đó làm điều này:

Select Replace(cast(textct as varchar),cast(Special_char as varchar), ' ') 
from mytable 

Nếu bạn muốn xóa tất cả các ký tự đặc biệt, bạn sẽ cần sử dụng dấu chấm câu ion như thế này:

Create Function RemoveSpecialCharacters (@text nvarchar(max)) 
Returns varchar(4000) 
AS 
BEGIN 
Declare @Return varchar(4000) = Cast(@text as varchar(4000)) 

While PatIndex('%[^a-z ]%', @Return) > 0 
     Set @Return = Stuff(@Return, PatIndex('%[^a-z ]%', @text), 1, ' ') 

Return @Return 
END 

Select RemoveSpecialCharacters(textct) from mytable 
+0

Xin chào Chris, giả định của bạn là chính xác. Nó là một cột nvarchar. Nguồn đang có nhiều hơn một trang mã NLS. vài ví dụ: Bà ঩ Montero, Ông ቙ 嫁 Chuông, ׎׌א׊ דרקון ... như ngôn ngữ tiếng do thái, Anh latin9 ngôn ngữ. khi tôi thử sao chép dán ký tự đặc biệt vào lệnh thay thế, biểu tượng đang thay đổi. nên không thể thay thế. Nếu chúng ta chuyển đổi nvarchar thành varchar thì có khả năng thay đổi các ký tự NLS hợp lệ. Tôi chỉ cần thay thế ký tự ঩. – srinath

+0

Có khá nhiều những gì chuyển đổi sang varchar sẽ làm. Nó sẽ không cho phép những ký tự đặc biệt đó nữa và do đó nó sẽ nhận ঩ ký tự và thay thế nó. Vì vậy, có nếu bạn chỉ cần làm một Chọn thay thế (cast (textct như varchar), '঩', '') sau đó hy vọng bạn sẽ thấy một số niềm vui. Chúc may mắn! –

+0

Tôi cần tất cả các ký tự đặc biệt khác với '঩'. vì nó là cột nvarchar. – srinath

1

Bạn có thể

select 
    textct, 
    replace(textct collate Latin1_General_BIN, nchar(2473), ' ') 
from 
    mytable 
2

Tạo chức năng này:

CREATE function RemoveSpecialCharacters(@Temp nvarchar(4000)) 
returns varchar(4000) 
as 
BEGIN 
    DECLARE @KeepValues as varchar(100) 
    -- you can add more characters like hyphen if you also want to keep those 
    SET @KeepValues = '%[^A-Z0-9 ]%' 
    WHILE PatIndex(@KeepValues, @Temp) > 0 
    SET @Temp = Stuff(@Temp, PatIndex(@KeepValues, 1, ' ') 
    RETURN @Temp 
END 

Bây giờ bạn có thể thay thế các ký tự.

SELECT dbo.RemoveSpecialCharacters('abc!"¤# ?123') 

Kết quả:

abc  123 
Các vấn đề liên quan