Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Достало начальство
|
|||
|---|---|---|---|
|
#18+
Ну во первых всем Привет!!! А вот вторых subj, и как говорится из за ошибок америкосов страдуют Русские программисты! Вообщем в чём суть проблемы есть некая табличка и в ней есть поле referens типа varchar(255), в этом поле содержатся номера сообщений, референсы выглядят следующим образом: 20010331/3456 20010212/TEST MESS-12345678 на и т.д. Собственно в этой таблице хранятся референсы сообщений которые мы отправляем америкосом, они нам в ответ присылают сообщение в котором перечислены референсы сообщений которые они получили от нас, НО это злодеи из референсов убирают все не алфавитно-цифровые символя, т.е. если мы им послали сообщение с референсом 20010525/1234 они в ответ присылают что они получили 200105251234, ошибка америкосов, но руководство не хочет с ними бодатся, а заставлет меня написать запрос типа: SELECT * FROM messages (NOLOCK) WHERE reference = '200105251234' и он должен выдать курсом где поле reference будет равно 20010525/1234, как написать такой запрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2001, 18:35 |
|
||
|
Достало начальство
|
|||
|---|---|---|---|
|
#18+
SELECT * FROM messages (NOLOCK) WHERE REPLACE(reference,'/','') = '200105251234' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2001, 18:49 |
|
||
|
Достало начальство
|
|||
|---|---|---|---|
|
#18+
А почему ты не хочешь создать второе поле, в которое заранее будешь писать вариант присылаемый янками? На мой взгляд - самое простое и тупое решение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2001, 18:50 |
|
||
|
Достало начальство
|
|||
|---|---|---|---|
|
#18+
1. SELECT * FROM messages (NOLOCK) WHERE REPLACE(reference,'/','') = '200105251234' Этот вариант проходит только если надо слэш убирать, а фактически нужно убирать все не алфавитно-цифровые символы, т.е. мы им можем послать сообщении с референсом '20010522/456.45' а они пришлют что получили '2001052245645'. 2. На самом деле доп.поле можно создать, но в этом совершенно нет необходимости, т.к. в первый раз всё равно надо как сопаставить референсы, а в этом вся и проблема!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 09:05 |
|
||
|
Достало начальство
|
|||
|---|---|---|---|
|
#18+
2 Tarantino есть такая аксиома в программировании: автоматизация бардака невозможна(бардак - в смысле организации работы, а не заведение). Так вот это типичный пример. Америкосы могут как-то поменять номер - скажите как мне его всё равно найти? Следующий этап - мне это не нравиться, сделайте что бы было хорошо. Если невозможно формализовать алгоритм искажения номера(о как умно написал!) - ничего не сделаешь(см. аксиому). Если можно - пиши, будем думать как реализовать, а скорее всего сам сообразишь. С приветом Сергей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 10:14 |
|
||
|
Достало начальство
|
|||
|---|---|---|---|
|
#18+
А может быть попытаться анализировать коды символов на принадлежность диапазону кодовой страницы, отведённому для цифр? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 10:24 |
|
||
|
Достало начальство
|
|||
|---|---|---|---|
|
#18+
А почему нельзя сделать через SP или UDF? Ведь там то сделать без проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 11:44 |
|
||
|
Достало начальство
|
|||
|---|---|---|---|
|
#18+
Вообще-то идею я взял и SergSuper DECLARE @tbSimbolTmp TABLE ( Num char(1) ) DECLARE @tbTmp TABLE ( Num int ) DECLARE @AA int SET @AA = 0 WHILE ( 1+1 =2 ) BEGIN __INSERT INTO @tbSimbolTmp VALUES ( @AA ) __SET @AA = @AA +1 __IF ( @AA = 10 ) BREAK END SET @AA = 65 WHILE ( 1+1 =2 ) BEGIN __INSERT INTO @tbSimbolTmp VALUES ( CHAR(@AA) ) __SET @AA = @AA +1 __IF ( @AA = 91 ) BREAK END SET @AA = 1 WHILE ( 1+1 =2 ) BEGIN __INSERT INTO @tbTmp VALUES ( @AA ) __SET @AA = @AA +1 __IF ( @AA = 14 ) BREAK END DECLARE @S varchar(20) SET @S = 'MESS-12345678' SELECT @S SELECT __@S = ISNULL( STUFF( @S, T.Num, CASE WHEN EXISTS ( SELECT * FROM @tbSimbolTmp WHERE Num = SUBSTRING( @S, T.Num, 1) ) THEN 0 ELSE 1 END, '' ), @S ) FROM __@tbTmp as T Количество строк в таблице @tbTmp должно соответствовать длине поля. Удачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 11:46 |
|
||
|
Достало начальство
|
|||
|---|---|---|---|
|
#18+
Неужели я даю такие идеи? Ужас... Пора прекращать их давать. Я бы проще написал последнюю строчку SELECT @S = replace(@S,Num,'')FROM @tbSimbolTmp ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2001, 12:04 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32006210&tid=1826683]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 269ms |
| total: | 380ms |

| 0 / 0 |
