回答
你知道字符串将永远是一个特定的长度吗?如果是的话,你可能硬编码一堆的子串/转换为诠释/乘法步骤。这将不完全是很好,但...
编辑:为了给多一点细节,想你知道这将是长度为4,你可以这样做:
SELECT (8 * CONVERT(int, SUBSTRING(@x, 1, 1)))
+ (4 * CONVERT(int, SUBSTRING(@x, 2, 1)))
+ (2 * CONVERT(int, SUBSTRING(@x, 3, 1)))
+ (1 * CONVERT(int, SUBSTRING(@x, 4, 1)))
道歉,如果语法稍微偏离。
不愉快,并且在更一般的情况下(您基本上需要以某种形式循环)不起作用,但它可能足以快速修复。如果downvoters可以请添加评论,这将是非常赞赏。T-SQL是在我的专业领域之外 - 解释为什么这是一个糟糕的主意是更有帮助,而不仅仅是downvote来指示它是不好主意。)
我认为这是downvoted导致其脆弱如地狱。像这样的代码总是打破生产 – 2009-09-09 23:12:52
我有一些模糊的类似HERE(StackOverflow),我在询问T-SQL中定制的“基本”转换。
这将是有趣的,看看你有什么建议!
看起来像this function做你所需要的。 另外,看起来像这里有an optimisation。
我不知道任何内置的,将在选择语句工作,铸造二进制或varbinary没有帮助。
看起来像你被卡住,要么写作这是一个UDF或扩展存储过程(托管或本地)。
另一种选择可能是创建一个巨大的查找表并加入它。你可能会得到比Sql函数更好的性能,我没有测试过它。我怀疑它会比扩展存储过程更好。
Oki,这是第一次尝试和快速破解并试图解决这个问题。 它当然不是很漂亮,但可能会给你一些关于如何最好地解决问题的想法。
编辑:只是重读sambo99答案,并指出优化版本链接提到那里。我在回答之前错过了。它看起来有些相似,但是这个最好是高达63位,因为那个被引用的链接仅适用于高达31位,并且如果你试图更多地传递它,它将会爆炸。这个版本忽略任何高于63的东西。
DECLARE @bin varchar(63)
DECLARE @origlen int
DECLARE @currlen int
DECLARE @tmp int
DECLARE @pwr bigint
DECLARE @dec bigint
DECLARE @val bigint
SET @pwr = 2
SET @dec = 0
SET @bin = '011111111111111111111111111111111' --Test Value
SET @bin = REVERSE(@bin)
SET @origlen = LEN(@bin)
SET @currlen = 0
WHILE(@currlen <> @origlen)
BEGIN
SET @tmp = CONVERT(int, SUBSTRING(@bin, @currlen + 1, 1))
IF (@tmp <> 0)
BEGIN
SET @val = @dec
SET @dec = POWER(@pwr, @currlen)
SET @val = @val + @dec
Set @dec = @val
END
SET @currlen = @currlen + 1
END
SELECT @val as 'Result'
希望这有助于。
- 1. TSQL GETDATE转换
- 2. TSQL日期转换
- 3. 动态TSQL到PSQL转换SDK?
- 4. 转换配合物TSQL程序到PostgreSQL
- 5. TSQL转换为LINQ转换参考?
- 6. 将TSQL转换为HSQL
- 7. 转换 '为const char [6]' 到“WCHAR **
- 8. 转换代码vb 6到vb.net
- 9. 找不到Jetty 6 to 7转换器
- 10. 打印0110作为回文
- 11. 麻烦转换一点TSQL到LINQ到实体
- 12. 的Safari 6和3D转换
- 13. TSQL转换地址列表CIDR标记
- 14. 将TSQL转换为MS-Access SQL
- 15. TSQL转换查询返回TRUE/FALSE
- 16. 将光标从PLSQL转换为TSQL
- 17. 将mySQL触发器转换为TSQL
- 18. 将TSQL查询转换为LINQ
- 19. 将DAX开关逻辑转换为TSQL
- 20. 在TSQL中的转换日期
- 21. 避免TSQL数据转换错误
- 22. TSQL表转换字段=>列
- 23. TSQL:错误而转换timestap为整数
- 24. TSQL NEWID转换成十进制(38,0)
- 25. TSQL或SSIS转换成列排
- 26. 转换PLSQL函数成为TSQL
- 27. 需要DB2查询转换为TSQL
- 28. TSQL:将varchar'dd/mm/yy'转换为DATETIME
- 29. tsql强制转换为金钱
- 30. 将TSQL查询转换为访问
请看Peter DeBetta的[博客文章](http://sqlblog.com/blogs/peter_debetta/archive/2008/10/15/964.aspx);你可以用这个作为起点。 – 2009-01-02 09:21:23