We help IT Professionals succeed at work.

SQL Syntax

219 Views
Last Modified: 2014-11-24
I have an insert statement that inserts values from an Excel spreadsheet:

insert into table (number)
values ("$Excel Column(1)$")

I would like to format the data from the spreadsheet to have leading zeros and following zeros (if that is the correct term) so that a value in the spreadsheet that appears as 2.02 would be stored in the number field as 02.020.  The data field is specified as nvarchar so that it can hold the numbers and the period.  I tried to format the column of cells in Excel but the formatting did not hold on the insert.  The format (number,00.000) does not work in the SQL code.

Not sure what to do.
Comment
Watch Question

Vitor Montalv√£oIT Engineer
CERTIFIED EXPERT
Distinguished Expert 2017

Commented:
I personally don't like to use SQL Server for formatting. For be a database it's only for store data and the formatting should be with the application layer.
Anyway, you can use RIGHT function:
insert into table (number)
 values (RIGHT('00'+ CONVERT(VARCHAR,"$Excel Column(1)$"),3)) 

Open in new window

Jim HornSQL Server Data Dude
CERTIFIED EXPERT
Most Valuable Expert 2013
Author of the Year 2015

Commented:
>I would like to format the data from the spreadsheet to have leading zeros and following zeros
Spell out for us at Barney-level why you want this, and specifically why it has to be inserted into the table this way.

You can always write T-SQL code to format it with leading zeros for various reports, but it's not considered a best practice to store numbers with leading zeros as a varchar.  Now if all you're doing is storing the values, and not performing any math on them, then different story.

>I tried to format the column of cells in Excel but the formatting did not hold on the insert.
Is data moving FROM Excel TO SQL Server, or the other way around?
HainKurtSr. System Analyst
CERTIFIED EXPERT

Commented:
why this should be so ugly?

declare @n float = 2.03;
select substring('00' + cast (@n as varchar) + '000', charindex('.', '00' + cast (@n as varchar))-2, 6)

02.030
HainKurtSr. System Analyst
CERTIFIED EXPERT

Commented:
table (number)

so table column datatype is numeric? or varchar(6)?
Scott PletcherSenior DBA
CERTIFIED EXPERT
Most Valuable Expert 2018
Distinguished Expert 2019

Commented:
REPLACE(STR([$Excel Column(1)$], 6, 3), ' ', '0')

Or, more fully:

insert into table1 (number)
values (REPLACE(STR([$Excel Column(1)$], 6, 3), ' ', '0'))

For example:
 select [$Excel Column(1)$],REPLACE(STR([$Excel Column(1)$], 6, 3), ' ', '0')
 from (
     select 2.02 as [$Excel Column(1)$] union all
     select 0.05 union all
     select 21.3 union all
     select 7
     ) as test_data

Author

Commented:
I have data in other databases where the data has been stored 00.000 and I need to be able to perform joins on this field.

The data is in an Excel spreadsheet and going to SQL.

I am not sure what "Barney-level" means, but i am simply trying to have the data in a format similar to other databases that I would join on.
HainKurtSr. System Analyst
CERTIFIED EXPERT

Commented:
the code I posted ^^^ is what you are trying to get... ugly but it should work as long as your input is correct...

Author

Commented:
The column that the data is inserted into is nvarchase because the value is two digits, a period, and three digits with leading zeros and zeros on the end to make it three digits after the period.

HainKurt, not sure how to integrate your code into an insert.
HainKurtSr. System Analyst
CERTIFIED EXPERT

Commented:
should be like:

insert into table (number)
 values (substring('00' + cast (@n as varchar) + '000', charindex('.', '00' + cast ("$Excel Column(1)$" as varchar))-2, 6)

Author

Commented:
HainKurt, I am not sure I follow your logic.  I get a substring function requires 3 arguments error when trying to copy your code into my example.  I added a declare line before the insert command, but not sure how that applies to dynamically getting a value out of the spreadsheet.

Can you clarify please?
Sr. System Analyst
CERTIFIED EXPERT
Commented:
This one is on us!
(Get your first solution completely free - no credit card required)
UNLOCK SOLUTION
Unlock the solution to this question.
Join our community and discover your potential

Experts Exchange is the only place where you can interact directly with leading experts in the technology field. Become a member today and access the collective knowledge of thousands of technology experts.

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.