SQL Server 2008: Cómo encontrar espacios

¿Cómo puedo encontrar todos los valores de una columna en una columna que tienen espacios? Para el líder de los espacios simplemente sería

select col from table where substring(col,1,1) = ' ';
InformationsquelleAutor atricapilla | 2010-03-31

12 Kommentare

  1. 60

    Usted puede encontrar espacios con LIKE:

    SELECT col FROM tbl WHERE col LIKE '% '
    • Sé que esto es muy viejo el post, pero me gustaría saber, si me gustaría comprobar si alguna de las columnas en la tabla contener espacios en blanco? Por cierto, tengo 45 campos de la tabla…¿cómo puedo hacerlo?
    • Que es una cuestión diferente. Te recomiendo que publiques como una cuestión diferente. 🙂
    • Depende. Una opción podría ser la creación de un BIT adicional de columna para almacenar un valor calculado (tiempo de activación?) de si es o no el campo termina con un espacio. Otra opción sería crear una Columna Calculada a hacer lo mismo. O tal vez una Vista indizada a hacer lo mismo. Por último, algo para intentar (puede ser peor, o no) sería el uso de cadenas para agarrar el último carácter y ver si se trata de un espacio, aunque sospecho que sería más lento.
  2. 7

    SQL Server 2005:

    select col from tbl where right(col, 1) = ' '

    Como una demo:

    select 
        case when right('said Fred', 1) = ' ' then 1 else 0 end as NoTrail,
        case when right('said Fred ', 1) = ' ' then 1 else 0 end as WithTrail

    devuelve

    NoTrail WithTrail
    0       1  
  3. 3

    Un método muy sencillo es utilizar la función LEN.
    LEN va a recortar espacios, pero que no precedió a los espacios, por lo que si su LEN() es diferente a la de su LEN(REVERSE()) vas a obtener todas las filas con espacios:

    select col from table where LEN(col) <> LEN(REVERSE(col));

    esto también puede ser usado para averiguar cómo muchos de los espacios que tienen para los más avanzados de la lógica.

  4. 3

    Esto es lo que ha funcionado para mí:

    select * from table_name where column_name not like RTRIM(column_name)

    Esto le dará todos los registros que tienen espacios.

    Si quieres obtener los documentos que han espacios iniciales o finales, a continuación, puede utilizar este:

    select * from table_name where column_name not like LTRIM(RTRIM(column_name))
  5. 1

    Hay un par de maneras diferentes de hacer esto…

    Mi opción favorita, asumiendo que su intención es eliminar cualquier tipo de conducción y /o espacios, es ejecutar la siguiente, que va a crear dinámicamente el T-SQL para UPDATE todas las columnas, con un espacio indeseado para sus tapizados valor:

    SELECT 
    'UPDATE [<DatabaseName>].[dbo].['+TABLE_NAME+']
    SET ['+COLUMN_NAME+']=LTRIM(RTRIM(['+COLUMN_NAME+']))
    WHERE ['+COLUMN_NAME+']=LTRIM(RTRIM(['+COLUMN_NAME+']));'+CHAR(13)
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME LIKE '<TableName>%' 
        AND DATA_TYPE!='date'
    ORDER BY TABLE_NAME,COLUMN_NAME

    Si usted realmente necesita para identificar a ellos, aunque, pruebe una de estas consultas:

    SELECT *
    FROM [database].[schema].[table]
    WHERE [col1]!=LTRIM(RTRIM([col1]))

    Más dinámicos de SQL:

    SELECT 'SELECT ''['+TABLE_NAME+'].['+COLUMN_NAME+']'',*
    FROM [<your database name>].[dbo].['+TABLE_NAME+']
    WHERE ['+COLUMN_NAME+'] LIKE ''% ''
        OR ['+COLUMN_NAME+'] LIKE '' %'';
    GO
    '
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME LIKE '<filter table name as desired>%'
        AND DATA_TYPE!='date'
    • ¿De qué manera es sobre la parte superior?
    • SELECCIONE col DE tbl DONDE col LIKE ‘% ‘
  6. 0

    Aquí una alternativa para buscar los registros con la inicial o final en los espacios en blanco, incluyendo fichas etc:

    SELECT * FROM tbl WHERE NOT TRIM(col) = col
    • No hay TRIM función en SQL Server y espacios en blanco son ignorados en = comparaciones de todos modos.
    • Ok, lo siento, pensé que era el estándar SQL. Funciona en PostgreSQL como se esperaba, sin embargo, y he encontrado esta pregunta porque yo estaba tratando de resolver el mismo problema con PostgreSQL, por lo que tal vez puede ayudar a alguien.
  7. 0

    Intente esto:

    UPDATE Battles
    SET name = CASE WHEN (LEN(name+'a')-1)>LEN(RTRIM(name))
    THEN REPLICATE(' ', (LEN(name+'a')-1)- LEN(RTRIM(name)))+RTRIM(name)
    ELSE name
    END
  8. 0

    Espacios son ignorados en SQL Server, de modo que para mí, incluso el espacio no estaba funcionando .

    select col from table where substring(col,1,1) = ' '

    no funciona si sólo hay un espacio (‘ ‘) o en blanco («)

    así que he ideado siguientes:

    select * from [table] where substring(REPLACE(col, ' ', '#'),1,1) = '#'
    • ¿Qué entiende usted por «los espacios son ignorados en SQL Server…»? Tal vez quiere decir en el contexto de la función substring?
    • No estoy seguro de lo OP que significaba, pero para un real valor en db de la ‘prueba ‘, tuve la fila devuelta para todos 1. where test like 'test', 2. 'where test like 'test ', 3. where test = 'test' y 4. where test='test '. También me pareció que len(test) fue de 4 en lugar de 5. Así que parece que todo lo de len, como y = ignorado el espacio final. La subcadena truco que los Truenos sugiere hizo reemplazar el espacio con un #, por lo que len, como y = podría ser utilizado. Este es posiblemente específicas de codificación.
  9. 0

    Aquí es otra alternativa para los espacios.

    DECLARE @VALUE VARCHAR(50) = NULL
    
    DECLARE @VALUE VARCHAR(50) = '  '
    
    IF ((@VALUE IS NOT NULL) AND (LTRIM(RTRIM(@VALUE)) != ''))
    
    BEGIN
       SELECT 'TRUE'
    END
    ELSE
    BEGIN
       SELECT 'FALSE'
    END
  10. 0

    He encontrado el aceptado respuesta un poco más lento:

    SELECT col FROM tbl WHERE col LIKE '% ';

    contra de esta técnica:

    SELECT col FROM tbl WHERE ASCII(RIGHT([value], 1)) = 32;

    La idea es conseguir que la última char, pero al comparar sus ASCII código con el ASCII código de espacio en lugar de sólo con ' ' (espacio). Si utilizamos sólo ' ' espacio, una cadena vacía producirá cierto:

    DECLARE @EmptyString NVARCHAR(12) = '';
    
    SELECT IIF(RIGHT(@EmptyString, 1) = ' ', 1, 0); -- this returns 1

    Lo anterior es debido a la Microsoft la aplicación de las comparaciones de cadenas.

    Así, ¿cómo de rápido exactamente?

    Usted puede probar el siguiente código:

    CREATE TABLE #DataSource 
    (
        [RowID] INT PRIMARY KEY IDENTITY(1,1)
       ,[value] NVARCHAR(1024)
    );
    
    INSERT INTO #DataSource ([value])
    SELECT TOP (1000000) 'text ' + CAST(ROW_NUMBER() OVER(ORDER BY t1.number) AS VARCHAR(12)) 
    FROM master..spt_values t1 
    CROSS JOIN master..spt_values t2
    
    UPDATE #DataSource
    SET [value] = [value] + ' '
    WHERE [RowID] = 100000;
    
    
    SELECT *
    FROM #DataSource
    WHERE ASCII(RIGHT([value], 1)) = 32;
    
    SELECT *
    FROM #DataSource
    WHERE [value] LIKE '% ';

    En mi máquina es de alrededor de 1 segundo de diferencia:

    SQL Server 2008: Cómo encontrar espacios

    He podido comprobar en la tabla con 600k filas, pero de mayor tamaño, y la diferencia era de más de 8 segundos. Así que, ¿cómo de rápido exactamente dependerá de su caso real de datos.

  11. -1

    Podemos tratar de subrayado encontrar las entradas que son espacios en blanco,aunque no es una solución exacta como la utilización de ‘% %’ o el ‘ ‘, Pero yo podría encontrar entradas que son de fogueo.

    seleccione col_name de la tabla donde col_name como ‘_’

    • Encontrar todos los valores que comienzan con CUALQUIER carácter.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea