クライアントが Excel で生成した関数を SQL でエミュレートしようとしています。実際には、エンタープライズ データベース システムの 1 つで、一意の 10 桁の数値 (VARCHAR) を主キーとして持っています。別のデータベース内では、一意の 5 桁の英数字の識別子が必要です。彼らは、その 5 桁の英数字の値が 10 桁の数字の表現であることを望んでいます。そこで、彼らが Excel で行ったことは、10 桁の数字をペアに分割し、それらの各ペアを 16 進数値に変換してから、それらをつなぎ合わせるというものでした。
EXCEL 式は次のとおりです。
=IF(VALUE(MID(A2,1,4))>0,DEC2HEX(VALUE(MID(A2,3,2)))&DEC2HEX(VALUE(MID(A2,5,2)))&DEC2HEX(VALUE(MID (A2,7,2)))&DEC2HEX(VALUE(MID(A2,9,2))),DEC2HEX(VALUE(MID(A2,5,2)))&DEC2HEX(VALUE(MID(A2,7,2) ))&DEC2HEX((値(MID(A2,9,2)))))
これに相当する SQL が必要です。もちろん、誰かが 10 桁の数字に基づく「5 桁の英数字識別子」という目標を達成するためのより良い方法を知っていれば、私はすべて耳を傾けます。
2011 年 8 月 2 日追加
まず、回答をくださった皆様に感謝いたします。喜んで助けてくれて、それを楽しんでいる人々を見るのはうれしいです!すべての回答に基づいて、私はクライアントに、彼らの意図は健全であり、彼らの方法だけが調子が悪いと言いがちです. また、解決策をお勧めしたいと思います。したがって、課題は残りますが、わずかに変更されています。
課題: SQL 内で、10 桁の一意の NUMERIC 文字列を取得し、できるだけ少ない文字数で英数字で表現します。結果の文字列も一意である必要があります。
10 桁の文字列の最初の 3 ~ 4 文字はゼロである可能性が高く、結果の英数字文字列を短くするためにそれらを削除できることに注意してください。必須ではありませんが、おそらく役立つでしょう。