我正在寻找一个SQL查询(使用SQL 2008)来搜索我为前导或尾随空格指定的各个字段(甚至是特定表中的所有字段)。我希望输出为两列,包含以下数据:
ID号,数据(有空格),字段名称
感谢您的帮助!
答案 0 :(得分:5)
您可以使用DATALENGTH
SELECT ID, Data, FieldName
FROM table
WHERE DATALENGTH(RTRIM(LTRIM(Data))) <> DATALENGTH(Data)
答案 1 :(得分:2)
尝试:
select `ID Number`, `Data (that has the space)`, `Field Name` from tbl WHERE data like ' %' or data like '% '
答案 2 :(得分:0)
我想这完全取决于你的意思,通过字段列表,下面的代码一次只能做一个。但是,如果要提供20列的列表并检查每个列,并输出到单个列表,则需要一些递归或一些复制/粘贴联合。
select ID, DATA,Field_Name
from table
where DATA like '[ ]%'
or DATA like '%[ ]'
除了ID之外,以下内容将为您提供所需的一切。我不确定这是列名称或行,还是Auto_ID或者是什么。如果它在每个表中的不同有点棘手,但如果它相同,你应该能够修改下面的内容。
Declare @Tables Varchar(8000)
,@Columns Varchar(8000)
,@Dynamic_SQL NVARCHAR(MAX)
IF OBJECT_ID('tempdb..#TempTables') IS NOT NULL
DROP TABLE #TempTables
Create Table #TempTables
(TableNames Varchar(8000))
Insert Into #TempTables
Values ('Finance_LTD_Summary_Data')
,('Golf_TX_TMP')
IF OBJECT_ID('tempdb..#Results') IS NOT NULL
DROP TABLE #Results
Create Table #Results
(TableNames Varchar(8000)
,ID Varchar(8000)
,Data Varchar(8000)
,FieldName Varchar(8000))
IF OBJECT_ID('tempdb..#Fields') IS NOT NULL
DROP TABLE #Fields
Create Table #Fields
(COLUMN_Name Varchar(8000))
DECLARE KeyTables_cursor CURSOR FOR
SELECT TableNames
from #TempTables
OPEN KeyTables_cursor
FETCH NEXT FROM KeyTables_cursor
INTO @Tables
WHILE @@fetch_status = 0
BEGIN
Set @Dynamic_SQL = 'truncate table #Fields
Insert into #Fields(COlumn_Name)
select COLUMN_NAME
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME =''' + @Tables + ''''
print convert(text,@Dynamic_Sql)
exec sp_executesql @Dynamic_Sql
DECLARE KeyColumns_cursor CURSOR FOR
SELECT COLUMN_Name
from #Fields
OPEN KeyColumns_cursor
FETCH NEXT FROM KeyColumns_cursor
INTO @Columns
WHILE @@fetch_status = 0
BEGIN
Set @Dynamic_SQL = 'Insert into #results(TableNames,Data,FieldName)
Select ''' + @Tables + ''' , ' + @Columns + ' , ''' + @Columns + '''
From ' + @Tables + '
Where ' + @Columns + ' like ''[ ]%''
or ' + @Columns + ' like ''%[ ]'''
print convert(text,@Dynamic_Sql)
exec sp_executesql @Dynamic_Sql
FETCH NEXT FROM KeyColumns_cursor into @Columns
END
CLOSE KeyColumns_cursor;
DEALLOCATE KeyColumns_cursor;
FETCH NEXT FROM KeyTables_cursor into @Tables
END
CLOSE KeyTables_cursor;
DEALLOCATE KeyTables_cursor;
答案 3 :(得分:0)
尝试这个..这对我有用..它将找到以特殊字符开头的记录
SELECT * FROM ITEM_MASTER WHERE BARCODE LIKE '[^0-9a-zA-Z ]%'