texto separar por ejemplos delimitada datos consultas complejas comas columnas cadena sql-server select-query

sql-server - ejemplos - separar cadena delimitada por comas en sql server



¿Cómo puedo seleccionar de la lista de valores en SQL Server? (11)

¿Has probado con la siguiente sintaxis?

select * from (values (1), (2), (3), (4), (5)) numbers(number)

Tengo un problema muy simple que no puedo resolver. Necesito hacer algo como esto:

select distinct * from (1, 1, 1, 2, 5, 1, 6).

¿Alguien puede ayudar?

Editar

Los datos provienen de un archivo de texto de uno de nuestros clientes. Está totalmente sin formatear (es una sola línea de texto muy larga), pero puede ser posible hacerlo en Excel. Pero no es práctico para mí, porque tendré que usar estos valores en mi consulta SQL. No es conveniente hacerlo cada vez que necesito ejecutar una consulta.



En general :

SELECT DISTINCT FieldName1, FieldName2, ..., FieldNameN FROM ( Values (ValueForField1,ValueForField2,...,ValueForFieldN), (ValueForField1,ValueForField2,...,ValueForFieldN), (ValueForField1,ValueForField2,...,ValueForFieldN), (ValueForField1,ValueForField2,...,ValueForFieldN), (ValueForField1,ValueForField2,...,ValueForFieldN) )AS TempTableName (FieldName1, FieldName2, ..., FieldNameN)

En tu caso :

Select distinct TempTableName.Field1 From ( VALUES (1), (1), (1), (2), (5), (1), (6) ) AS TempTableName (Field1)


Esto funciona en SQL Server 2005 y si hay un número máximo:

SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY a.id) NUMBER FROM syscomments a CROSS JOIN syscomments b) c WHERE c.NUMBER IN (1,4,6,7,9)


La forma más simple de obtener los valores distintivos de una larga lista de texto delimitado por comas sería usar un buscar y reemplazar con UNION para obtener los valores distintos.

SELECT 1 UNION SELECT 1 UNION SELECT 1 UNION SELECT 2 UNION SELECT 5 UNION SELECT 1 UNION SELECT 6

Aplicado a su larga línea de texto delimitado por comas

  • Encuentra y reemplaza cada coma con UNION SELECT
  • Agregar un SELECT en frente de la declaración

Ahora debería tener una consulta que funcione


Otra forma que puede usar es una consulta como esta:

SELECT DISTINCT LTRIM(m.n.value(''.[1]'',''varchar(8000)'')) as columnName FROM (SELECT CAST(''<XMLRoot><RowData>'' + REPLACE(t.val,'','',''</RowData><RowData>'') + ''</RowData></XMLRoot>'' AS XML) AS x FROM (SELECT ''1, 1, 1, 2, 5, 1, 6'') AS t(val) ) dt CROSS APPLY x.nodes(''/XMLRoot/RowData'') m(n);


PostgreSQL te da 2 formas de hacer esto:

SELECT DISTINCT * FROM (VALUES(''a''),(''b''),(''a''),(''v'')) AS tbl(col1)

o

SELECT DISTINCT * FROM (select unnest(array[''a'',''b'', ''a'',''v''])) AS tbl(col1)

Usando el enfoque de matriz también puedes hacer algo como esto:

SELECT DISTINCT * FROM (select unnest(string_to_array(''a;b;c;d;e;f;a;b;d'', '';''))) AS tbl(col1)


Si desea seleccionar solo ciertos valores de una sola tabla, puede intentar esto

select distinct(*) from table_name where table_field in (1,1,2,3,4,5)

p.ej:

select first_name,phone_number from telephone_list where district id in (1,2,5,7,8,9)

si desea seleccionar de varias tablas, entonces debe elegir UNION .

Si solo desea seleccionar los valores 1, 1, 1, 2, 5, 1, 6, debe hacerlo

select 1 union select 1 union select 1 union select 2 union select 5 union select 1 union select 6


Si necesita una matriz, separe las columnas de la matriz con una coma:

SELECT * FROM (VALUES(''WOMENS''),(''MENS''),(''CHILDRENS'')) as X([Attribute]) ,(VALUES(742),(318)) AS z([StoreID])


Una técnica que me ha funcionado es consultar una tabla que usted sabe tiene una gran cantidad de registros, incluyendo solo el campo Row_Number en su resultado

Select Top 10000 Row_Number() OVER (Order by fieldintable) As ''recnum'' From largetable

devolverá un conjunto de resultados de 10000 registros de 1 a 10000, utilízalo en otra consulta para darte los resultados deseados


Use la función SQL In

Algo como esto:

SELECT * FROM mytable WHERE: "VALUE" In (1,2,3,7,90,500)

Funciona como un regalo en ArcGIS