交换 - 在一个字符串中进入第一个位置 [英] Swap - in a string into first position

查看:59
本文介绍了交换 - 在一个字符串中进入第一个位置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述





我的金额值我必须做以下



1应该安装在10个字符中

2.左边的零填充剩余的字符除了价值

3.应该显示 - 如果存在,则为金额字段的符号

4.如果金额是-ve' - '符号应该显示在值的前面。



例如:有一个值-45.10



它应打印为-000045.10



以下是我所做的很远。



非常感谢任何帮助



 选择 REPLACE( CONVERT  CHAR  10 ),tbl.Amount),' ',< span class =code-string>'  0'
来自m table tbl





0000-40.00是我得到的结果是上面的查询。



如果字符串中出现如上所示的-ve符号,它应该在第一个位置-000040.00

解决方案

尝试:

  SELECT  < span class =code-keyword> CASE   WHEN  MyColumn<  0  那么 '   - ' +  RIGHT '  00000000' +  CONVERT  NVARCHAR , -  MyColumn), 9  ELSE   RIGHT '  000000000' +  CONVERT  NVARCHAR ,MyColumn), 10  END  作为 NumericValue  FROM  MyTable 


这应该有效:



  SELECT  STUFF(CAST(Val  AS   VARCHAR  10 )), CASE   WHEN  Val< 0 那么  2   ELSE   1   END  0 ,REPLICATE('  0',10-LEN (CAST(Val  AS   VARCHAR  10  )))))





但它执行 CAST 两次,我不喜欢。我会使用Common Table Expression来消除重复的工作。





  WITH  cte0  AS  

SELECT -45。 10 Val

,cte1 AS

SELECT Val,CAST(Val AS VARCHAR 10 ))ValStr FROM cte0

SELECT STUFF(ValStr, CASE WHEN Val< 0 那么 2 ELSE 1 END 0 ,REPLICATE(' 0',10-LEN(ValStr)))
FROM cte1







或者,如果你可以升级,你可以使用FORMAT功能:



  SELECT 格式(-45。 10 '  000000.00'


试试这个:

  DECLARE   @number  十进制 10  2 
SET @ number = -45。 10
SELECT
CASE
WHEN @ num ber < 0 那么
' < span class =code-string> - ' + RIGHT ' 000000000' + CONVERT VARCHAR 9 ),ABS( @ number )), 9
ELSE
RIGHT ' 0000000000' + CONVERT VARCHAR 10 ), @ number ), 10
END


Hi,

I have amount value for which I have to do the following

1. Should be fitted in 10 chars
2. left pad with zeros the remaining chars apart from the value
3. Should be showing - ve sign for the amount field if present
4. if the amount is -ve '-' symbol should be displayed in front of the value.

For eg: there is a value -45.10

it should be printed as -000045.10

Below is what I have done so far.

Any help is very appreciated

select REPLACE(CONVERT(CHAR(10),tbl.Amount),' ','0')
from table tbl



"0000-40.00" is the result I am getting with the above query.

If a -ve sign is present as above in the string it should be in the first place "-000040.00"

解决方案

Try:

SELECT CASE WHEN MyColumn < 0 THEN '-' + RIGHT('00000000' + CONVERT(NVARCHAR,-MyColumn), 9) ELSE RIGHT('000000000' + CONVERT(NVARCHAR,MyColumn), 10) END As NumericValue FROM MyTable


This should work:

SELECT STUFF(CAST(Val AS VARCHAR(10)),CASE WHEN Val<0 THEN 2 ELSE 1 END,0,REPLICATE('0',10-LEN(CAST(Val AS VARCHAR(10)))))



but it performs the CAST twice, which I don't like. I would use a Common Table Expression to eliminate the duplicated effort.


WITH cte0 AS
(
    SELECT -45.10 Val
)
, cte1 AS
(
    SELECT Val , CAST(Val AS VARCHAR(10)) ValStr FROM cte0
)
SELECT STUFF(ValStr,CASE WHEN Val<0 THEN 2 ELSE 1 END,0,REPLICATE('0',10-LEN(ValStr)))
FROM cte1




Or, if you can upgrade, you can use the FORMAT function:

SELECT FORMAT(-45.10,'000000.00')


Try this:

DECLARE @number decimal(10,2)
SET @number = -45.10
SELECT
   CASE
      WHEN @number < 0 THEN
         '-' + RIGHT('000000000' + CONVERT(VARCHAR(9), ABS(@number)), 9)
      ELSE
         RIGHT('0000000000' + CONVERT(VARCHAR(10), @number), 10)
   END


这篇关于交换 - 在一个字符串中进入第一个位置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆