SQL: Как сравнить два слова по частям? - PullRequest
1 голос
/ 28 апреля 2011

У меня есть table1 с идентификатором столбца и table2 с идентификатором столбца.Например, формат идентификатора - «aac557z».Я хочу сравнить эти идентификаторы по частям, где число.Table1:

enter image description here

И Table2:

enter image description here

Я хочу выбрать строки из таблицы1, где находится часть слова "567 "в столбце ID.Числа могут быть разными.Может быть, у кого-то есть идея?Я использую MS Access 2010. Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 28 апреля 2011

Если числовая часть идентификатора всегда находится в одном и том же месте и одинаковой длины, вы можете использовать функцию MID, чтобы получить числовую часть для сравнения.Это не будет очень быстро для больших таблиц.

Вот ссылка на синтаксис: http://office.microsoft.com/en-us/access-help/mid-function-HA001228881.aspx

Если вы собираетесь делать это сравнение часто, может быть лучше добавить другое полек вашей таблице и заполните ее числовой частью идентификатора, когда он будет вставлен в таблицу.Затем, используя это поле для сравнения, ваш запрос должен быть быстрее.

0 голосов
/ 28 апреля 2011

Вы можете использовать пользовательскую функцию для извлечения числовой части из идентификатора, а затем все остальное довольно тривиально.

Вот функция для выполнения работы:

CREATE FUNCTION ExtractInteger(@String VARCHAR(2000))
RETURNS VARCHAR(1000)
AS
BEGIN
DECLARE @Count INT
DECLARE @IntNumbers VARCHAR(1000)
SET @Count = 0
SET @IntNumbers = ''

WHILE @Count <= LEN(@String)
BEGIN
IF SUBSTRING(@String,@Count,1) >= '0'
AND SUBSTRING(@String,@Count,1) <= '9'
BEGIN
SET @IntNumbers = @IntNumbers + SUBSTRING(@String,@Count,1)
END
SET @Count = @Count + 1
END

RETURN @IntNumbers
END

А потом сравнить, как то так:

SELECT * from TABLE1
JOIN TABLE2
    on dbo.ExtractInteger(TABLE1.ID) = dbo.ExtractInteger(Table2.ID)

Если таблицы очень большие, то это будет дорогой запрос!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...