У меня есть инструкция TSQL, которая запрашивает одну таблицу, которая ищет повторяющиеся номера уличных адресов. Например, «123 Street» соответствует «123 St.». Я использую CHARINDEX отделить строку, выбирая символы слева от строки, но до пространства, которые являются почти всегда цифры, как показано ниже:TSQL Azure SQL Server LEFT CHARINDEX
"SELECT NewId() as NewId," +
//We rename the dbo.User table as "a" then rename it again as "b" so we can look for duplicate Street Address numbers
"a.Id AS LeftID,a.DateSubmitted AS LeftDateSubmitted,a.Updated AS LeftUpdated," +
"a.Status AS LeftStatus,a.StreetAddress AS LeftStreetAddress," +
"b.Id AS RightID,b.DateSubmitted AS RightDateSubmitted,b.Updated AS RightUpdated," +
"b.Status AS RightStatus,b.StreetAddress AS RightStreetAddress " +
//We join the 2 virtual dbo.User tables where table b Id's are greater than table a meaning b records are newer
"FROM [User] a JOIN [User] b ON b.Id > a.Id AND " +
//LEFT selects the left most characters (usually numbers) in the StreetAddress field string before the space ' '
//and eliminates the rest of the address isolating just the street address numbers for matching
"LEFT(a.StreetAddress,CHARINDEX(' ',a.StreetAddress)) = LEFT(b.StreetAddress,CHARINDEX(' ',b.StreetAddress)) " +
//Don't show orange or blue status records
"AND b.Status != 'Orange' AND a.Status != 'Orange' AND a.Status != 'Blue' AND b.Status != 'Blue' " +
//If a b record (newer) is red then ignore because it is completed and ignore a records (oldest) older than 90 days
"WHERE a.DateSubmitted >= (GetDate() - 90) AND b.Status != 'Red' " +
//Show newest records first
"ORDER BY b.DateSubmitted DESC"
Это работает довольно хорошо до сих пор было замечено, что ложь позитивы подхватили, если человек поступил в адрес во всех колпачков, как показано ниже:
Мое понимание использования:
LEFT(a.StreetAddress,CHARINDEX(' ',a.StreetAddress))
приведет ли в крайней левой ча racters перед пространством, используемым для моего JOIN, но изображение выше показывает совпадения, которые не должны возникать? Пожалуйста, помогите начинающему SQL ...
Я ценю ответ, но я не уверен, что ответ говорит мне, говоря, что запрос не доходит до сервера. Что именно привело бы вас к этой решимости? Спасибо Брайан, я попробую точку останова. –
Я не думаю, что сервер выполняет запрос, который вы нам поделили, потому что строка, которую вы, кажется, строите с этим кодом, совсем не соответствует вашим результатам. Я не думаю, что это проблема с запросом, который вы намереваетесь, или с строками в данных ... Я думаю, что это проблема с логистикой отправки правильной строки на сервер. Я не могу помочь вам в этой части с информацией, которую вы поделили в своем вопросе. Это не просто совпадение адресов неправильно ... это игнорирует часть, которая также объединяется с идентификаторами. –
Дело в том, что он хорошо работает уже много месяцев. На этой неделе это стало странно и только с адресами, набранными всеми шапками. При этом понятно, что с этой ограниченной информацией прямой ответ вряд ли достигнут. Я надеялся, что CHARINDEX и подсказка всех шапок могут вызвать звонок для кого-то, но это может быть красная селедка. Кроме того, несмотря на то, что в выражении SQL есть конкатенация, когда я его разрабатываю, это единственная строка в VS 2015 и оба результата совпадают. Но самое главное - это ваше предложение добавить точки останова, о которых я сейчас разъясняю. Тай Брайан! –