SQL Server에서 varbinary를 문자열로


93

어떻게에서 열 값을 변환 varbinary(max)varchar사람이 읽을 수있는 형태로?


3
값이 문자열 값에서 isterted 되었기 때문에 varchar를 원합니다 .. 쓰여진 내용을 읽어야합니다.
Bilgin Kılıç

@MartinSmith ppl은 저를 변화 시키도록 강요합니다. 다시 답변을 표시했습니다. 당신의 친절한 komments에 감사드립니다.
Bilgin Kılıç

사람들은 스타일이 매개 변수가 더 많이 필요한 것 같다 투표에 따라 검색 엔진에서이 건너 오는 것 같다하지만이 원래 요구 사항이 무엇인지하지 않습니다
마틴 스미스

답변:


87

"는 변환 varbinary을하는 것은 varchar"다른 것을 의미 할 수있다.

VARBINARY는 SQL Server에서 문자열의 이진 표현 인 경우 (예를 들어 캐스트에 의해 반환 varbinary직접 또는에서 DecryptByPassPhrase또는 DECOMPRESS당신은 그냥 할 수있는 기능) CAST

declare @b varbinary(max)
set @b = 0x5468697320697320612074657374

select cast(@b as varchar(max)) /*Returns "This is a test"*/

이는 CONVERT스타일 매개 변수와 함께 사용하는 것과 같습니다 0.

CONVERT(varchar(max), @b, 0)

CONVERT다른 답변에 명시된대로 다른 요구 사항에 대해 다른 스타일 매개 변수를 사용할 수 있습니다 .


38
이 답변은 정확하지 않습니다. 사용자 SID가있는 테이블에서 테스트했습니다. Distinct 캐스트 값의 양은 Distinct 바이너리 SID의 양보다 적습니다. 당신은 고유 한 값을 얻기 위해 CONVERT (VARCHAR (...), binaryValue, 2)를 사용한다 - Gunjan Juyal에서 대답은 바로 하나입니다 -이 솔루션으로 표시되어야합니다
필립 Munin

13
@PhilippMunin-두 답변은 서로 다른 일을합니다. 이것은 내 기본 데이터 정렬에 SELECT CAST('This is a test' AS VARBINARY(100))있는 것과 같은 식의 결과를 가져와 0x5468697320697320612074657374다시 varchar문자열 로 변환 합니다. Gunjan의 대답은 16 진수 표현을 문자열로 반환합니다 ( '5468697320697320612074657374') 아마도이 해석은 OP의 필요에 맞을 것입니다.
Martin Smith

8
이 답변이 정확합니다! 나는 그것을 테스트했고 그것은 나와 OP가 원하는 것을 수행합니다.
Ronnie Overby

1
@BIDeveloper 위의 주석 (특히 내 의견)을 읽었다면 문제는 "varbinary를 varchar로 변환"이 다른 방식으로 해석 될 수 있다는 것입니다. 실제로 이것이 CONVERT원하는 방식을 선택하는 스타일 매개 변수가있는 이유입니다 (내 해석은 기본 스타일입니다). 따라서이 답변은 현재 사용 사례에 필요한 것이 아닐 수도 있지만 다른 사용 사례에는 정확합니다. 16 진수가 아닌 "사람이 읽을 수있는 형식"을 지정한 원래 질문자를 포함합니다.
마틴 스미스

1
SQL 2005는 sys.fn_sqlvarbasetostr (@binary)를 사용할 수 있습니다. CONVERT가 나를 위해 비어 있기 때문에
TheNerdyNerd

149

다음 표현이 저에게 효과적이었습니다.

SELECT CONVERT(VARCHAR(1000), varbinary_value, 2);

다음 은 스타일 선택에 대한 자세한 내용입니다 (세 번째 매개 변수).


아래 @ lara-mayugba가 설명했듯이 스타일 1은 유용 할 수있는 결과에 0x 접두사를 포함합니다.
Stan

@celerno 왜 그들은? 이것은 그들이 필요한 것을하지 않습니다.
Martin Smith

1
2008 년 이전에는 sys.fn_sqlvarbasetostr (@binaryfield) 사용
TheNerdyNerd

@metabuddy-어떤 방식으로 잘못된 정보입니까? "varbinary를 varchar로 변환"이라는 용어는 다양한 방식으로 수행 될 수 있으며 이러한 방식은 스타일 매개 변수에 의해 제어됨을 나타냅니다. 그 대답 스타일 매개 변수를 사용하면 귀하의 경우에 필요한 것이 아니다 (하지만 원래의 질문에 대한 대답 하나입니다) 그것은 잘못된하지 않는다해서
마틴 스미스

@TheNerdyNerd의 댓글 / 답변을 강조하기 위해 표현식은`select sys.fn_sqlvarbasetostr (@b) / * returns 0x5468697320697320612074657374 * / 2008 년 이전 버전에서는 사용하지 않기 때문에 varchar (max)를 varchar (8000)으로 변경한다고 가정합니다. .
Zachary Scott

63

사실 가장 좋은 대답은

SELECT CONVERT(VARCHAR(1000), varbinary_value, 1);

" 2"를 사용 0x하면 varbinary.


@BojieShuai "너무 동의해서 더 이상 동의하는 것이 불가능하다"또는 "동의하곤했지만 더 이상 동의하지 않는다"를 의미 했습니까?
howcheng

@howcheng "더 이상 동의 할 수 없다"는 뜻입니다. 지적 해 주셔서 감사합니다.
Bojie Shuai

15

이 시도

SELECT CONVERT(varchar(5000), yourvarbincolumn, 0)

6
0 대신 2를 세 번째 매개 변수로 사용해야했습니다. 여기 에서 그 답을 찾았 습니다 .
WEFX

1
제 경우에는 5000 대신 MAX를 사용해야합니다
sulaiman sudirman

0

A의 VARBINARY(MAX)열, 내가 사용했다 NVARCHAR(MAX):

cast(Content as nvarchar(max))

또는

CONVERT(NVARCHAR(MAX), Content, 0)
VARCHAR(MAX) didn't show the entire value

0

나는 이것을 시도했고 그것은 나를 위해 일했다.

declare @b2 VARBINARY(MAX) 
set @b2 = 0x54006800690073002000690073002000610020007400650073007400
SELECT CONVERT(nVARCHAR(1000), @b2, 0);

0

너무 원본 게시물에 어려움을 겪고 있었기 때문에 아래에 가보세요 [여기] [1]

bcp "SELECT CAST(BINARYCOL AS VARCHAR(MAX)) FROM OLTP_TABLE WHERE ID=123123 AND COMPANYID=123" 
queryout "C:\Users\USER\Documents\ps_scripts\res.txt" -c -S myserver.db.com  -U admin -P password


  [1]: https://stackoverflow.com/questions/60525910/powershell-truncating-sql-query-output?noredirect=1#comment107077512_60525910
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.