Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
DarkCat Member Откуда: 142000 Сообщений: 12331 |
Нужен TSQL код, который сможет выполнить преобразование: 123456789012 -> 1CDOFQR*ijabci+ Процедура стандартная, может есть у кого? |
10 июн 10, 17:53 [8926330] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37198 |
|
||
10 июн 10, 18:05 [8926417] Ответить | Цитировать Сообщить модератору |
DarkCat Member Откуда: 142000 Сообщений: 12331 |
Нужна процедура которая берет 12 чисел, добавляет к ним контрольный разряд, и преобразует всё это в 15-значную последовательность символов, которую если изобразить шрифтом EAN13 то получится баркод для его последующего распечатывания.. |
||||
10 июн 10, 18:22 [8926543] Ответить | Цитировать Сообщить модератору |
BorodaSoft Member Откуда: Ростов-на-Дону Сообщений: 35 |
DarkCat, Смотрите тут и тут |
10 июн 10, 23:18 [8927742] Ответить | Цитировать Сообщить модератору |
DarkCat Member Откуда: 142000 Сообщений: 12331 |
спасибо, похоже то что нужно |
||
11 июн 10, 10:36 [8929021] Ответить | Цитировать Сообщить модератору |
DarkCat Member Откуда: 142000 Сообщений: 12331 |
если вдруг кому интересно, вот перевод в TSQLcreate PROCEDURE BARTOTXT ( @chaine varchar(13)) as declare @i integer declare @first integer declare @checksum integer declare @CodeBarre varchar (25) declare @tableA integer begin set @CodeBarre = '' set @checksum = 0 set @i = 2 while (@i<13) begin set @checksum = @checksum + CAST(substring(@chaine,@i,1) AS int) set @i = @i + 2 end set @checksum = @checksum*3; set @i = 1 while (@i<13) begin set @checksum = @checksum + CAST(substring(@chaine,@i,1) AS int) set @i = @i + 2 end set @chaine = substring(@chaine,1,12) + CAST((10 - @checksum % 10) % 10 as varchar(1)) set @CodeBarre = SubString(@chaine,1,1) + CHAR(65 + CAST(SubString(@chaine,2,1) as int)); set @first = CAST(SubString(@chaine,1,1) as int) set @i = 3 while (@i<=7) begin set @tableA = 0; if (@i = 3 and @first >= 0 and @first <= 3) set @tableA = 1; if (@i = 4 and (@first=0 or @first=4 or @first=7 or @first=8)) set @tableA = 1; if (@i = 5 and (@first=0 or @first=1 or @first=4 or @first=5 or @first=9)) set @tableA = 1; if (@i = 6 and (@first=0 or @first=2 or @first=5 or @first=6 or @first=7)) set @tableA = 1; if (@i = 7 and (@first=0 or @first=3 or @first=6 or @first=8 or @first=9)) set @tableA = 1; if @tableA = 1 set @CodeBarre = @CodeBarre + char(65 + CAST(SubString(@chaine,@i,1) as int)); else set @CodeBarre = @CodeBarre + char(75 + CAST(SubString(@chaine,@i,1) as int)); set @i = @i + 1 end set @CodeBarre = @CodeBarre + '*' set @i = 8 while (@i<=13) begin set @CodeBarre = @CodeBarre + char(97 + CAST(SubString(@chaine,@i,1) as int)); set @i = @i + 1 end set @CodeBarre = @CodeBarre + '+' select @chaine as code, @CodeBarre as ean13txt end шрифт во вложении К сообщению приложен файл (ean13.ttf - 8Kb) cкачать ![]() |
15 июн 10, 16:11 [8944861] Ответить | Цитировать Сообщить модератору |
Между сообщениями интервал более 1 года. |
alik-os Member Откуда: Сообщений: 8 |
Спасибо, помогло! |
5 дек 12, 11:51 [13579967] Ответить | Цитировать Сообщить модератору |
Между сообщениями интервал более 1 года. |
Настаев Member Откуда: Сообщений: 475 |
А где тут закрывается условие IF? |
||
1 окт 19, 20:45 [21984348] Ответить | Цитировать Сообщить модератору |
Lepsik Member Откуда: glubinka Сообщений: 4256 |
оно тут нигде не закрывается. читайте синтаксис IF |
1 окт 19, 21:03 [21984353] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47063 |
Вообще-то, перед ELSE точка с запятой стоять не может. |
1 окт 19, 21:48 [21984367] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1162 |
С каких это пор? DECLARE @t int; IF 1 > 0 SET @t = 0; ELSE SET @t = 1; PRINT @t;
Я бы поправил, что оно нигде явно не закрывается. Неявно else работает строго на один стейтмент после него, после чего закрывается. Если нужно несколько стейтментов по условию - их нужно явно обернуть в begin ... end |
||||
2 окт 19, 09:52 [21984557] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52884 |
С пор, когда некоторые особо выдающиеся некрофилы стали путать T-SQL и Pascal. |
||
2 окт 19, 13:41 [21984854] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |