2010-05-25 15 views
5

Böyle bir durumda, böyle bir durumda, bunu yapmanın kolay bir yolu varsa şaşırırım.Varchar() 'daki onaltılık karakterler aslında asciidir. Kodunun çözülmesi gerekiyor

Tür varchar alanlı bir MS SQL DB sahibim (255). Ascii kod çözücü kullanarak kodunu çözdüğünüzde aslında bir Guid olan bir hex dizgisi içerir. Bunu gerçekten garip geliyor ama burada bir örnek biliyorum:

alanın içeriği: "38353334373838622D393030302D343732392D383436622D383161336634396339663931"

aslında temsil Ne: "8534788b-9000-4729-846b-81a3f49c9f91" İhtiyacım

Bunu çözmek için bir yol ve sadece alanın içeriğini temsil ettiği gerçek kılavuza değiştirin. Bunu T-SQL'de yapmam gerekiyor, kullanamıyorum. Net (eğer yapabilirsem, bu son derece basittir).

GÜNCELLEME: Bazı insanlar tek seferlik tablolara çalışabilir yolları ile yanıt verdiler, ben bir UPDATE deyimi içine bu koymak için bir yol gerekir. Örneğin

: MyFunction Bu sorunun doğru cevabı GÜNCELLEME MyTable SET MyField = MyFunction (MyField)

.

cevap

5

bu want..8534788b-9000-4729-846b-81a3f49c9f91 Eğer değişken ikili ve sonra varchar geri dönüştürmek için değer dönüştürmek gerekiyor

select CONVERT(varchar(36), 
0x38353334373838622D393030302D343732392D383436622D383161336634396339663931) 

burada

biridir şeyi vereceğim yolu siz CHAR işlevi ile yapabilirsiniz bireysel karakterleri dönüştürmek istiyorsanız dinamik SQL

declare @v varchar(100) 
select @v = '0x' + '38353334373838622D393030302D343732392D383436622D383161336634396339663931' 

exec ('SELECT CONVERT(varchar(36),' + @v + ')') 
+0

Bu yolun yarısını bana getiriyor, ama varbinary'ye nasıl ulaşırım? Eğer seçtiğimde, dönüştür (varbinary (max), 'FF') bana 0x4646 verir, benim durumumda dize 0xFF – csauve

+1

olmalıdır, muhtemelen bazı dinamik güncelleştirme SQL deyimini yapmak zorundasınız – SQLMenace

+0

Teşekkürler! Bu kesinlikle çalışacak, dinamik SQL kullanmayı düşünmedim. :) – csauve

1

kullanarak:

SELECT CHAR(0x38) 

Ancak onaltılı olduğu için numarayı 0x ile önceden eklemelisiniz.

İlgili konular