18 Stimmen

TSQL - wie zu finden, wenn eine Spalte ein Leerzeichen char(32) hat?

TSQL - wie man herausfindet, ob eine Spalte ein Leerzeichen hat char(32) ?

select *
from [sometable]
where CHARINDEX(' ', [somecolumn]) > 0

nicht funktioniert? Irgendwelche Ideen?

0 Stimmen

Welche Werte funktionieren und welche nicht?

0 Stimmen

Welcher Typ ist das Feld somecolumn?

16voto

Joe Punkte 39875

Sie müssen CHAR-Spalten rtrimmen.

CHAR-Spalten werden auf der rechten Seite mit Leerzeichen aufgefüllt, bis die maximale Länge erreicht ist.

RTRIM hilft, Fehlalarme zu vermeiden, wenn Zeichenketten gespeichert werden, die kürzer als die maximale Länge sind.

select * from [table] where rtrim(col) like '% %'

create table dropme
(foo char(32))

insert into dropme values('nospaces')
insert into dropme values('i have a space')
insert into dropme values('space bar')

select replace(foo,' ','|') from dropme
where foo like '% %'

nospaces
i|have|a|space
space|bar

select replace(foo,' ','|') from dropme
where rtrim(foo) like '% %'

i|have|a|space
space|bar

0 Stimmen

Et ltrim() wie in rtrim(ltrim(col)) ?

0 Stimmen

@CodeBlend CHAR-Spalten werden auf der rechten Seite mit Leerzeichen aufgefüllt, bis die maximale Länge erreicht ist. RTRIM hilft, Fehlalarme zu vermeiden, wenn Zeichenketten gespeichert werden, die kürzer als die Maximallänge sind. LTRIM hilft nicht dabei, dies zu vermeiden, und kann sogar zu falsch negativen Ergebnissen führen, wenn Sie Leerzeichen am Anfang eines Wertes finden wollen.

7voto

John Sansom Punkte 40295

Das folgende Beispiel soll verdeutlichen, wie Sie dies erreichen können.

create table #tableTest
(
    someData varchar(100) not null
);

insert into #tableTest(someData) values('dsadsa');
insert into #tableTest(someData) values('fdssf 432423');
insert into #tableTest(someData) values('432423fsdv');
insert into #tableTest(someData) values('321 jhlhkj 543');

select * 
from #tableTest;

select * 
from #tableTest 
where charindex(char(32),someData) > 0;

drop table #tableTest;

2voto

A-K Punkte 16460

Was meinen Sie mit "funktioniert nicht"? Für mich funktionieren beide Wege:

SELECT ''''+a+'''' FROM(
SELECT 'asd fgh' AS a UNION ALL
SELECT ' fgh' AS a UNION ALL
SELECT 'asd ' AS a UNION ALL
SELECT 'asfdg') As t
WHERE a LIKE '% %'

---------
'asd fgh'
' fgh'
'asd '

SELECT ''''+a+'''' FROM(
SELECT 'asd fgh' AS a UNION ALL
SELECT ' fgh' AS a UNION ALL
SELECT 'asd ' AS a UNION ALL
SELECT 'asfdg') As t
WHERE CHARINDEX(' ', a) > 0

---------
'asd fgh'
' fgh'
'asd '

0 Stimmen

Es war keine exakte Lösung für mein Problem, aber es brachte mich einer Lösung näher. Diese Art der Darstellung hat mich sehr beeindruckt. Danke!

2voto

Pratheeskumar Punkte 353

Bei mir hat das Folgende funktioniert:

PrdPicture LIKE '%'+char(160)+'%'

1voto

gbn Punkte 407102

Da Sie nicht wirklich erklärt haben, was das Problem ist...

Suchen Sie nach hardspace (nbsp) , CHAR(160) ? Oder tab CHAR(9) ? Diese können wie Leerzeichen aussehen, sind es aber nicht

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X