Solved

SQL Syntax

Posted on 2014-11-24
11
185 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.
0
Comment
Question by:mounty95
11 Comments
 
LVL 46

Expert Comment

by:Vitor Montalvão
ID: 40462619
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

0
 
LVL 65

Expert Comment

by:Jim Horn
ID: 40462623
>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?
0
 
LVL 51

Expert Comment

by:HainKurt
ID: 40462632
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
0
 
LVL 51

Expert Comment

by:HainKurt
ID: 40462639
table (number)

so table column datatype is numeric? or varchar(6)?
0
 
LVL 69

Expert Comment

by:ScottPletcher
ID: 40462656
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
0
U.S. Department of Agriculture and Acronis Access

With the new era of mobile computing, smartphones and tablets, wireless communications and cloud services, the USDA sought to take advantage of a mobilized workforce and the blurring lines between personal and corporate computing resources.

 

Author Comment

by:mounty95
ID: 40462683
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.
0
 
LVL 51

Expert Comment

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

Author Comment

by:mounty95
ID: 40462783
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.
0
 
LVL 51

Expert Comment

by:HainKurt
ID: 40462833
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)
0
 

Author Comment

by:mounty95
ID: 40462908
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?
0
 
LVL 51

Accepted Solution

by:
HainKurt earned 500 total points
ID: 40462956
you said you are using this:

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

if this works, then this one should work too:

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

i forgot to replace some test variable here :)
0

Featured Post

Best Practices: Disaster Recovery Testing

Besides backup, any IT division should have a disaster recovery plan. You will find a few tips below relating to the development of such a plan and to what issues one should pay special attention in the course of backup planning.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article explains how to reset the password of the sa account on a Microsoft SQL Server.  The steps in this article work in SQL 2005, 2008, 2008 R2, 2012, 2014 and 2016.
Ever needed a SQL 2008 Database replicated/mirrored/log shipped on another server but you can't take the downtime inflicted by initial snapshot or disconnect while T-logs are restored or mirror applied? You can use SQL Server Initialize from Backup…
Viewers will learn how to use the SELECT statement in SQL to return specific rows and columns, with various degrees of sorting and limits in place.
Viewers will learn how to use the UPDATE and DELETE statements to change or remove existing data from their tables. Make a table: Update a specific column given a specific row using the UPDATE statement: Remove a set of values using the DELETE s…

914 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now