- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这是我第一次在论坛上发帖提问,因为我通常更喜欢自己研究并找到答案,但我是一名程序员,足以承认数据库编程是我的致命弱点。
我希望创建一个 base31 标识列以用于我的数据库,或者根据我正在阅读的内容,将 SQL 标识列映射到 Base32 列。
我正在尝试创建 00000-ZZZZZ 范围内的唯一 5 位字母数字序列。 (例如 0BG85)
我意识到字母数字代码并不理想,因为最终您的序列会拼出许多商业不当词,因此我将消除元音 (a、e、i、o、u)。因此 Base31。这个项目的限制因素是我使用的是 Code39 条形码实现,它将我限制为 0-9 和 A-Z(仅限大写)。
我对数据库编程的了解有限,我最初的想法是查询最后生成的 ID,然后通过 C# 类的算法递增下一个 ID。我的直觉和我一直在阅读的所有内容都告诉我,这是执行任务的一种迟钝、不优雅的方式。
我的研究使我找到了这些资源
Custom Auto-Generated Sequences with SQL Server
Convert any integer to a string base 2 through 36
我想知道我是否使用了第二个链接的功能
稍加编辑
Declare @alldigits as varchar(31);
Set @alldigits='0123456789BCDFGHJKLMNPQRSTVWXYZ'
并通过存储过程或触发器(以前从未使用过触发器)将标识列值发送给它,这可以接受吗?我在正确的轨道上吗?
FUNCTION dbo.CreateBase31ID
(
@val as BigInt,
@base as int
)
returns varchar(63)
as
Begin
/* From http://sqltips.wordpress.com/2009/01/12/tsql-function-to-convert-decimal-to-hex-octal-or-any-other-base/ */
/* blog text:
SQL Tips by Namwar Rizvi
Frequently I see the questions in newsgroups about a function to convert
integer value to other bases like base 2 (binary), base 8 (octal) and base 16(hex).
Following TSQL function, which was orginally mentioned by Itzik Ben-Gan
in his book Inside Microsoft SQL Server 2005:TSQL Querying, provides you the
ability to convert a given integer into any target base.
I have just updated the function with more meaningful names and added some
comments to clear the logic.
*/
/* Check if value is valid and if we get a valid base (2 through 36) */
If (@val<0) OR (@base < 2) OR (@base> 36) Return Null;
/* variable to hold final answer */
Declare @answer as varchar(63);
/* Following variable contains all
possible alpha numeric letters for any valid base
*/
Declare @alldigits as varchar(31);
Set @alldigits='0123456789BCDFGHJKLMNPQRSTVWXYZ'
/* Set the initial value of
final answer as empty string
*/
Set @answer='';
/* Loop while the source value remains greater than 0 */
While @val>0
Begin
Set @answer=Substring(@alldigits,@val % @base + 1,1) + @answer;
Set @val = @val / @base;
End
/* Return the final answer */
return @answer;
End
当向函数发送标识列值时,此函数正常工作。它完美地映射到我手工计算的测试值。我要真诚地感谢 Namwar Rizvi 的原始代码示例和 Brian Biales(来 self 之前帖子的第二个链接)解释并真正分解了 Namwar 的原始功能。我的老板认为我是个天才,但实际上,如果没有互联网和乐于助人的程序员为我指明道路,我将只不过是一个门外汉。
我希望这对以后的其他人有所帮助。
最佳答案
我知道你有一个解决方案,但你的脚本有几个小问题:
我稍微重新格式化了一下,得到了这个:
FUNCTION BigIntToBase31Ish (
@Value BIGINT)
RETURNS VARCHAR(255)
AS
BEGIN
DECLARE @Result VARCHAR(255) = '';
DECLARE @Base INT = 31;
DECLARE @ConvertDigits VARCHAR(31) = '0123456789BCDFGHJKLMNPQRSTVWXYZ';
--Is the integer value valid?
IF @Value < 0
RETURN NULL;
--Convert the integer value to base 31
WHILE @Value > 0
BEGIN
SELECT @Result = SUBSTRING(@ConvertDigits,@Value % @Base + 1, 1) + @Result;
SELECT @Value = @Value / @Base;
END;
RETURN @Result;
END;
关于c# - 如何在 SQL 中创建/映射 base31 "Identity"列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15533701/
如果我不定义自己的构造函数,Base *b = new Base; 与 Base *b = new Base(); 之间有什么区别吗? 最佳答案 初始化是标准中要遵循的一种 PITA...然而,这两个
是否有现成的函数可以在 C# 中进行基本转换?我希望将以 26 为基数和以 27 为基数的数字转换为以 10 为基数。我可以在纸上完成,但我不是一个非常有经验的程序员,如果可能的话,我宁愿不要从头开始
JNA 中'base'是什么意思 Pointer.getPointerArray(long base) Pointer.getStringArray(long base) ? JNA Document
我正在做一个将数字从 10 进制转换为 2 进制的基本程序。我得到了这段代码: #include #include #include #include using namespace std;
“假设以下代码: public class MultiplasHerancas { static GrandFather grandFather = new GrandFather();
当我分析算法的时候,我突然问自己这个问题,如果我们有三元计算机时间复杂度会更便宜吗?还是有任何基础可以让我们构建计算机,这样时间复杂度分析就无关紧要了?我在互联网上找不到太多,但是基于三元的计算机在给
一个简化的场景。三个类,GrandParent,Parent 和 Child。我想要做的是利用 GrandParent 和 Parent 构造函数来初始化一个 Child 实例。 class Gran
我编写了一个简单的函数来将基数为 10 的数字转换为二进制数。我编写的函数是我使用我所知道的简单工具的最佳尝试。我已经在这个网站上查找了如何执行此操作的其他方法,但我还不太了解它。我确定我编写的函数非
我尝试了以下代码将数字从 base-10 转换为另一个 base。如果目标基地中没有零(0),它就会工作。检查 79 和 3 并正确打印正确的 2221。现在尝试数字 19 和 3,结果将是 21 而
这个问题在这里已经有了答案: Is Big O(logn) log base e? (7 个答案) 关闭 8 年前。 Intro 练习 4.4.6 的大多数解决方案。算法第三版说,n*log3(n)
如何判断基类(B)的指针是否(多态)重写了基类的某个虚函数? class B{ public: int aField=0; virtual void f(){}; }; class C
我测试了这样的代码: class A { public A() { } public virtual void Test () { Console.WriteL
两者都采用相同的概念:定义一些行和列并将内容添加到特定位置。但是 Grid 是最常见的 WPF 布局容器,而 html 中基于表格的布局是 very controversial .那么,为什么 WPF
我试图在 JS 中“获得”继承。我刚刚发现了一种基本上可以将所有属性从一个对象复制到另一个对象的简洁方法: function Person(name){ this.name="Mr or Miss
class A { public override int GetHashCode() { return 1; } } class B : A { pu
我有一个 Base32 信息哈希。例如IXE2K3JMCPUZWTW3YQZZOIB5XD6KZIEQ ,我需要将其转换为base16。 我怎样才能用 PHP 做到这一点? 我的代码如下所示: $ha
我已经使用其实验界面对 Google Analytics 进行了一些实验,一切似乎都运行良好,但我无法找到 Google Analytics 属性如何达到变体目标的答案,即归因 session - 基
if (state is NoteInitial || state is NewNote) return ListView.builder(
MSVC、Clang 和 GCC 不同意此代码: struct Base { int x; }; struct Der1 : public Base {}; struct Der2 : public
我已经尝试构建一个 Base 10 到 Base 2 转换器... var baseTen = window.prompt("Put a number from Base 10 to conver
我是一名优秀的程序员,十分优秀!